vue 中给window添加了一个addEventListener事件监听,离开组件后无法removeEventListener

Sven
  • 553

已找到原因 vue.js window.removeEventListener 移除

以下是原问题

created() {
    window.addEventListener('onmessageWS', e => {
      console.log(e.detail.data, 'order')
      if (e.detail.data === 'pong' || e.detail.data === 'ok') return
      this.page = 1
      this.loading = false
      this.finished = false
      this.onLoad()
    })
  },
  beforeDestroy() {
    window.removeEventListener('onmessageWS', () => {})
  },

我在created中给window添加了addEventListener,绑定了一个自定义事件
然后我在beforeDestroy 或者destroyed钩子中都尝试调用removeEventListener去移除这个事件,但是没有生效,离开了这个组件,addEventListener中的处理函数依然在执行

回复
阅读 13.7k
3 个回答
const listener = function() { ... };
el.addEventListener('click', listener);
el.removeEventListener('click', listener);

貌似没法用个匿名函数去移除监听

移除监听,不能使用匿名函数

yiqiG
  • 1
新手上路,请多包涵

使用匿名函数的话,移除监听时无法找到匿名函数的地址,当然无法移除,楼主那里写的监听和移除监听的两个函数用的不是同一个内存地址

宣传栏