当我离开时完全删除对先前 Vue 组件的引用

Completely delete references to previous Vue component when I navigate away

我有一个 Vue 组件 /foo 监听 scrollresize 事件:

export default {
    name: 'foo',
    mounted() {
        window.onresize = function (event) {
            //doing stuff
            console.log('doing onresize stuff');
        };

        window.addEventListener('scroll', function (event) {
            //doing stuff
            console.log('doing scroll stuff');
        });
...

哪个工作正常。但是,当我使用 VueRouter 并注销并离开 /foo 到另一个组件 /bar 时,当我滚动时,我的控制台仍然充满了 scrollresize 事件并调整新 /bar 组件的大小:

doing scroll stuff
doing onresize stuff
doing scroll stuff
doing scroll stuff
doing scroll stuff

我怎样才能完全停止所有引用并从内存中删除(?)上一页(/foo),这样就不会发生这种情况?

您可以使用removeEventListener

const handler = (event) => console.log(event)

export default {
  mounted() {
    window.addEventListener('scroll', handler)
  },
  beforeDestroy() {
    window.removeEventListener('scroll', handler)
  }
}

W3schools 有更多示例。

如果你正在监听 DOM 上的事件,你可以使用 Vue 的 v-on@ 语法,例如@click。在这种情况下,Vue 将为您处理事件侦听器。