我面临着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中有什么东西吗?
如果您不清楚,我可以详细解释。
答案 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 比使用事件总线要好。