给localStorage缓存添加全局监听器
需求:在做单应用页面的时候,每个组件都是独立的,有时候我们a组件里面的东西修改了,需要b组件进行在a组件修改的同时进行响应,就需要监听器,这种时候我们需要定义监听器并且在b组件里面监听,然后在a组件触发。监听器:可以单独定义一个监听器(事件分发类),也可以用原生提供的,或者直接绑在localStorage上面,这里说下帮在localStorage上面的吧,比较快捷方便。这样就可以简单的实现全局事件
·
需求:在做单应用页面的时候,每个组件都是独立的,有时候我们a组件里面的东西修改了,需要b组件进行在a组件修改的同时进行响应,就需要监听器,这种时候我们需要定义监听器并且在b组件里面监听,然后在a组件触发
监听器:可以单独定义一个监听器(事件分发类),也可以用原生提供的,或者直接绑在localStorage上面,这里说下帮在localStorage上面的吧,比较快捷方便
定义监听器(全局):
const originalSetItem = localStorage.setItem;
localStorage.setItem = function (key, value) {
const event: any = new Event('itemInserted');
event.value = value; // Optional..
event.key = key; // Optional..
document.dispatchEvent(event);
// @ts-ignore
// eslint-disable-next-line
originalSetItem.apply(this, arguments);
};
a组件 触发监听器
localStorage.setItem('collapsed', collapsed ? '0' : '1');
b组件 监听事件分发监听器
//监听事件
const localStorageSetHandler = function (e: any) {
// localStorage
if (e.key === 'collapsed') {
//这里接受到了监听触发。做想要处理的事情
}
};
document.addEventListener('itemInserted', localStorageSetHandler, false);
return () => {
//组件移除需要把事件给移除掉
document.removeEventListener('itemInserted', localStorageSetHandler);
};
这样就可以简单的实现全局事件分发了。如果想要更精细点的话可以自己定义一个监听类来实现
不过个人不建议经常使用分发器 来做业务处理,除非是只有这种办法了,因为分发器是全局的,会破环各个组件之间的独立性;单页面应用应该遵循组件独立,模块独立原则,尽量不要互相有关联,(高内聚低耦合)才能让项目在后期更好维护。
更多推荐

所有评论(0)