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变化的资料请关注其它相关文章! |