export default function dispatchEventStroage() {
  const signSetItem = localStorage.setItem
  localStorage.setItem = function (key, val) {
    //为了触发一个事件,需要传入一个 Event 对象作为参数
    let setEvent = new Event('setItemEvent')
    setEvent.key = key
    setEvent.newValue = val
    //手动触发窗口对象上的事件的方法
    window.dispatchEvent(setEvent)
    //在当前上下文中调用 signSetItem 函数,并将 arguments 对象中的参数传递给该函数。
    signSetItem.apply(this, arguments)
  }
}

这段代码是一个用来监听 localStorage 变化的函数 dispatchEventStroage()。它的代码逻辑如下:

  1. 首先,它将 localStorage.setItem 方法赋值给一个变量 signSetItem。
  2. 然后,它将localStorage.setItem 方法重写为一个新的函数,并在这个重写的函数中实现了以下逻辑: 创建一个自定义事件对象setEvent,事件类型为 ‘setItemEvent’,并将 key 和 val 分别赋值给事件对象的 key 和 newValue属性。 使用 window.dispatchEvent(setEvent) 手动触发窗口对象上的 setItemEvent 事件。
  3. 最后,使用 signSetItem.apply(this, arguments) 在当前上下文中调用原始的localStorage.setItem 方法,以确保之前的设置行为仍然继续生效。
    这样做的目的是为了在调用 localStorage.setItem 方法时,能够额外触发一个自定义的事件,从而允许其他代码监听这个事件并作出相应的响应。通过使用自定义事件,可以扩展对 localStorage 变化的监听和处理能力。
//main.js
import dispatchEventStroage from './utils/app.extension'
const app = createApp(App)
app.use(dispatchEventStroage)
//引用页面
window.addEventListener('setItemEvent', function (e: any) {
        if (e.key === 'curPatient') {
          // tableData 是需要监听的键名
          console.log(JSON.parse(e.newValue)) // 这里的newValue就是localStorage中,键名为tableData对应的变化后的值。
        }
      })
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐