vue项目中,监听sessionStorage的数据改变
需求:父组件中的随时可能改变的数据是缓存到sessionStorage里面的,子组件需要通过这个改变的数据,随时进行数据更新。
-
监听父组件的数据变化并更新缓存
vue中监听数据变化,在watch中写如下函数:
watch: {
date: function(newdate, olddate) {
this.CurentTime(newdate)
var date = this.CurentTime(newdate)
sessionStorage.setItem(’_date_str’, date)
this.resetSetItem(‘watchStorage’, date)
}
},
-
子组件中,接收该数据
_this.time = sessionStorage.getItem(’_date_str’)
-
需要监听sessionStorage中的数据,要在main.js中写如下的代码
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190410130300166.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NoYWRvd195aV8wNDE2,size_16,color_FFFFFF,t_70)
// 保存整站vuex本地储存初始状态
window.SITE_CONFIG[‘storeState’] = cloneDeep(store.state)
Vue.prototype.resetSetItem = function (key, newVal) {
if (key === ‘watchStorage’) {
// 创建一个StorageEvent事件
var newStorageEvent = document.createEvent(‘StorageEvent’)
const storage = {
setItem: function (k, val) {
sessionStorage.setItem(k, val)
// 初始化创建的事件
newStorageEvent.initStorageEvent(‘setItem’, false, false, k, null, val, null, null)
// 派发对象
window.dispatchEvent(newStorageEvent)
}
}
return storage.setItem(key, newVal);
}
}
-
在需要监听sessionStorage的组件中的create生命周期中,进行监听
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190410130535498.png)
created () {
window.addEventListener(‘setItem’, ()=> {
this.newVal = sessionStorage.getItem(‘watchStorage’)
this.time = this.newVal
})
},
这样就可以监听到每一次数据变化,并进行相关的数据变换的操作啊