当组件被多次加载时,eventBus正在侦听重复事件

时间:2018-03-26 05:17:29

标签: vue.js vuejs2 vue-component

我面临着vue.js eventBus非常重要和奇怪的问题。

我的代码是这样的,

mounted: function() {
    eventBus.$on('load-item', () => {
        // some loading data ajax 
    })
}

所以,如果我第一次参加这个组件,它只会执行一次。但是如果我切换到其他组件然后又回到这个组件,事件会发出一次,但是监听器正在执行这个功能2次。因此每次访问此组件时,它都会越来越多地加载数据。第三次3 Ajax请求。第4次4 ajax等。

我试过以下解决方案,

beforeDestroy: function () {
    eventBus.$off('load-item');
}

因此,上面的代码将删除侦听器,它是否仅在销毁组件时才起作用。但就我而言,如果另一个视图使用相同的组件,则会出现相同的问题。

我的问题是,当我们更改页面时,完全删除事件监听器的最佳方法是什么?

vue.js中有什么东西吗?

如果您不清楚,我可以详细解释。

2 个答案:

答案 0 :(得分:8)

也许您需要eventBus.$once代替eventBus.$on 在执行完$ 1之后使用$,除非再次初始化,否则不再调用

答案 1 :(得分:0)

如果唯一的事件名称。可以应用如下

mounted: function() {
    if (!eventBus._events['load-item']) {
        eventBus.$on('load-item', () => {
            // some loading data ajax 
        })
    }
}

不过,我知道使用 vuex 比使用事件总线要好。