给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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值