JavaScript实时监听localStorage变化的实现方法小结 |
在不同窗口/选项卡中监听 localStorage 变化当 示例代码// 添加 storage 事件监听器
window.addEventListener('storage', function(event) {
if (event.key === 'groupID') {
console.log('New value:', event.newValue);
}
});
解释
注意事项
在同一个窗口/选项卡中监听 localStorage 变化在同一个窗口/选项卡中, 方法一:使用自定义事件
function setLocalStorageItem(key, value) {
localStorage.setItem(key, value);
const event = new CustomEvent('localStorageChange', { detail: { key, value } });
window.dispatchEvent(event);
}
window.addEventListener('localStorageChange', function(event) {
if (event.detail.key === 'groupID') {
console.log('New value:', event.detail.value);
}
});
方法二:使用定时器轮询另一种方法是在一定时间间隔内轮询 let lastValue = localStorage.getItem('groupID');
setInterval(function() {
const newValue = localStorage.getItem('groupID');
if (newValue !== lastValue) {
console.log('New value:', newValue);
lastValue = newValue;
}
}, 1000); // 每秒检查一次
方法三:使用 Proxy 对象如果希望对所有的 const localStorageProxy = new Proxy(localStorage, {
set(target, key, value) {
target.setItem(key, value);
const event = new CustomEvent('localStorageChange', { detail: { key, value } });
window.dispatchEvent(event);
return true;
}
});
// 设置值时使用代理对象
localStorageProxy.groupID = 'newValue';
// 监听自定义事件
window.addEventListener('localStorageChange', function(event) {
if (event.detail.key === 'groupID') {
console.log('New value:', event.detail.value);
}
});
示例:通过 localStorage 监听实现页面间通信假设我们有两个页面,页面A设置 页面A:设置 localStorage 并触发自定义事件const sss = (node, data) => {
let id = data.id.split('_')[1];
alert(id);
localStorage.setItem('groupID', id);
// 手动触发自定义事件
const event = new CustomEvent('localStorageChange', { detail: { key: 'groupID', value: id } });
window.dispatchEvent(event);
};
页面B:监听自定义事件并获取最新的 groupID 值mounted() {
let _this = this;
// 初次加载时获取数据
_this.getData();
// 使用自定义事件监听 groupID 变化
window.addEventListener('localStorageChange', function(event) {
if (event.detail.key === 'groupID') {
alert('1');
_this.getData();
}
});
},
methods: {
async getData() {
const id = localStorage.getItem('groupID');
// 检查 id 是否存在
if (!id) {
this.$message({
message: 'Group ID 不存在,请先选择一个组 。',
type: 'warning'
});
return;
}
try {
const res = await traffic.trafficvulndel({
page: this.formData.page_num,
size: this.pageSize,
search: this.formData.search_field,
groupID: id,
...this.formData
});
if (res.code === 200) {
this.tableData = res.data.assetsInfo;
console.log(this.tableData, 'this.tableData');
this.totalpage = res.data.count;
} else {
this.$message({
message: res.msg,
type: 'error'
});
}
} catch (error) {
console.log(error);
this.$message({
message: '请求失败,请稍后再试 。',
type: 'error'
});
}
}
}
以上就是JavaScript实时监听localStorage变化的实现方法小结的详细内容,更多关于JavaScript监听localStorage变化的资料请关注其它相关文章! |