【问题标题】:How to stop sending data in an EventBus if found the a specific value?如果找到特定值,如何停止在 EventBus 中发送数据?
【发布时间】:2019-10-26 12:03:10
【问题描述】:

我正在使用 Javascript 开发 Vuejs 组件。我有一个向其他组件发出 EventBus 的组件。在发送方组件上,我有一个索引列表,这些索引一个一个地指向另一个组件,评估它是否为真。例如:

listA: 0
listA: 0
listA: 0
listA: 0
listA: 1
listA: 0
listA: 0

在接收器组件上,我一一获取 listA。我正在做一个 switch 案例,看看我何时收到值 1 并将其返回到具有特定 css 的 div 中的我的 html。在我的开关中,当遇到像这样的值 1 时,我取消了事件总线:

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

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

【问题讨论】:

    标签: javascript vue.js events ecmascript-6 web-frameworks


    【解决方案1】:

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

    • EventBus.$off() - 从所有事件中删除所有处理程序
    • EventBus.$off('event-name') - 从单个事件中删除所有处理程序
    • EventBus.$off('event-name', handler) - 从单个事件中删除特定的处理程序

    在您的情况下,使用 EventBus.$off('event-message'); 会删除 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);
    

    【讨论】:

      【解决方案2】:

      首先我完全反对使用事件总线,就像你从人群中拿出一个扬声器喊GABRIEL,加布里埃尔能听到多少消息并做出反应,这就是事件总线的效果,它尖叫声,每个人都能听到,这对您的应用程序来说可能是一个大问题,我建议您使用事件传播,直到您通过 $ 发射和属性到达理想的组件。 但是要停止事件,就必须触发事件。 EventBus.$off('事件消息', nameFunctionAction); https://vuejs.org/v2/guide/components.html#Listening-to-Child-Components-Events

      【讨论】:

      • 事件总线有许多合法用途,因此像这样的一揽子政策可能与对所有事情都使用事件总线一样有害​​。我能想到的一个例子是,假设您希望同一组件的不同实例能够进行通信。一个菜单弹出框,您只希望在屏幕上显示一个(并在显示一个时关闭所有其他菜单)。显然,组件实例之间没有发射链,不知道它们可能安装在哪里。您唯一的选择是 DOM 遍历、Vuex、自定义浏览器事件(不是非常 Vue)或事件总线。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 2021-11-08
      • 2014-02-02
      相关资源
      最近更新 更多