当前位置:  开发笔记 > 前端 > 正文

Vue.js方法使用$ emit和$ on多次调用,只应调用一次

如何解决《Vue.js方法使用$emit和$on多次调用,只应调用一次》经验,为你挑选了2个好方法。

我正在使用总线允许组件通过此链接中描述的方法与其他组件交互:https://forum.vuejs.org/t/create-event-bus-in-webpack-template/4546/2 .

我有一个在创建的钩子中调用的方法,它使用总线发出一个事件.

created () {
  this.getReviewDeck()
},
myMethod () {
    bus.$emit('increment')
}

在另一个组件(包含在上面的组件中)中,我将事件监听器附加到创建的钩子中,如下所示:

created () {
  bus.$on('increment', this.incrementCount)
},
incrementCount () {
  console.log('count incremented')
}

如果我第一次访问组件一切正常,控制台将记录"计数递增"一次.但是,如果我离开组件然后导航回到它,下次"计数递增"将被记录两次,如果我离开并再次返回,它现在将被记录三次等.

我无法弄清楚究竟发生了什么或者如何最好地解决这个问题,这样每次我去组件时,消息只记录一次而不是多次.



1> dpst..:

不得不在destroy上删除事件处理程序.

 beforeDestroy () {
    EventBus.$off('increment', this.incrementCount)
 },


不知怎的,@ dpst的解决方案在我的情况下效果不好,一旦我将`bus. $ off`添加到`beforeDestory`,它就触发了一次修复.这时我在函数结束时添加了`bus.$ off`并将其称为一天.

2> 小智..:

您可以使用$ .once

created () {
  bus.$once('increment', this.incrementCount)
},

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有