Javascript 如果发现特定值,如何停止在EventBus中发送数据?

Javascript 如果发现特定值,如何停止在EventBus中发送数据?,javascript,vue.js,events,ecmascript-6,web-frameworks,Javascript,Vue.js,Events,Ecmascript 6,Web Frameworks,我正在使用Javascript开发Vuejs组件。我有一个组件向另一个组件发送EventBus。在sender组件上,我有一个索引列表,它一个接一个地转到另一个组件,评估它是否为true。例如: listA: 0 listA: 0 listA: 0 listA: 0 listA: 1 listA: 0 listA: 0 在接收器组件上,我一个接一个地得到列表A。我正在做一个switch case,以查看何时接收到值1并使用特定css将其返回到div中的html。在我的交换机中,遇到如下值1时,

我正在使用Javascript开发Vuejs组件。我有一个组件向另一个组件发送EventBus。在sender组件上,我有一个索引列表,它一个接一个地转到另一个组件,评估它是否为true。例如:

listA: 0
listA: 0
listA: 0
listA: 0
listA: 1
listA: 0
listA: 0
在接收器组件上,我一个接一个地得到列表A。我正在做一个switch case,以查看何时接收到值1并使用特定css将其返回到div中的html。在我的交换机中,遇到如下值1时,我取消eventbus:

switch(listA) {
   case 1: 
      return something
      EventBus.$off('event-message');
   case 0: 
      // do nothing
}

这只是工作良好…但是,我的问题是,当我必须在同一页中为不同的div使用这两次或更多次。我想对所有div使用相同的事件,否则代码会越来越长,当我取消一个div中的事件时,它会取消所有div中的事件。是否有人可以在不取消事件的情况下返回值1,并且如果遇到值1,则停止查看其余值?

Vue的
EventBus
有3种使用
$off
的方法:

  • EventBus.$off()
    -从所有事件中删除所有处理程序
  • EventBus.$off('event-name')
    -从单个事件中删除所有处理程序
  • EventBus.$off('event-name',handler)
    -从单个事件中删除特定的处理程序
在您的情况下,使用
EventBus.$off('event-message')删除
事件消息
事件的所有事件处理程序

要从事件中取消订阅当前事件处理程序,请执行以下操作:

// The event handler function.
const eventMessageHandler = () => { ... }

// Listen to the event
EventBus.$on('event-message', eventMessageHandler);

// Stop listening - unsubscribe current handler
EventBus.$off('event-message', eventMessageHandler);

首先,我完全反对使用事件总线,就像你从人群中拿出一个演讲者喊GABRIEL,GABRIEL能听到多少信息并做出反应,这就是事件总线的效果,它尖叫,每个人都能听到,这对你的应用程序来说可能是个大问题,我建议使用事件传播,直到通过$emits和属性找到理想的组件。 但要停止事件,必须触发事件。 EventBus.$off('event-message',nameFunctionAction);

事件总线有许多合法用途,因此像这样的一揽子政策可能会像对所有事情使用事件总线一样有害。我能想到的一个例子是,您希望同一组件的不同实例能够通信。一个菜单弹出窗口,您只希望在屏幕上显示一个按钮(当显示一个按钮时,所有其他按钮关闭)。显然,组件实例之间没有发射链,不知道它们可能安装在哪里。您唯一的选项是DOM遍历、Vuex、自定义浏览器事件(不是很Vue)或事件总线。