为什么不用vuex?
该项目是个多人合作项目,我要在已经写好的逻辑上进行开发,写好的逻辑——vuex中存储的变量会在每次页面刷新或切换页面时重新从后台获取,所以没有写页面一刷新就将vuex中数据存到本地,重新渲染时又将本地存储的数据读取出来重新放入vuex的监听函数。
而我需要的dots变量不是从后台获取的,也不能每次刷新都恢复初始值,所以不能把它存在vuex或者页面的data中,最好是放本地,但同时我还要实现一个页面中对dots变量的修改会影响到另一个页面中的数据更新,所以要对本地的dots变量进行监听。
1.main.js中在vue原型上注册全局方法
// 参数1-key 本地存储的变量名 newVal 参数1变量名对应的值
Vue.prototype.resetSetItem = function(key, newVal) {
//if判断 可对本地存储的多个变量进行操作
if (key === "dots") {
// 创建一个指定类型的事件对象(StorageEvent)
var newStorageEvent = document.createEvent("StorageEvent");
const storage = {
//对象中定义方法
setItem: function(k, val) {
sessionStorage.setItem(k, val);
// 初始化创建的事件对象
newStorageEvent.initStorageEvent(
"setItem",//事件名
false,//事件是否通过dom冒泡
false,//事件是否可取消
k,//将会影响到的键命
null,//键的旧值
val,//键的新值
null,//
null
);
// 向window派发事件对象
window.dispatchEvent(newStorageEvent);
},
};
//调用对象的方法
return storage.setItem(key, newVal);
}
};
2.只有通过注册的全局方法对本地存储进行改变 才会被监听方法监听到
this.resetSetItem("dots", JSON.stringify([1, 1, 1, 1]));
3.在需要监听本地存储的页面的mounted里写入
window.addEventListener("setItem", () => {
// 操作
// 例如 this.dots = [...JSON.parse(sessionStorage.getItem("dots"))];
});
版权声明:本文为qq_45560350原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。