Как остановить отправку данных в EventBus, если найдено определенное значение? - PullRequest
0 голосов
/ 26 октября 2019

Я работаю над компонентами Vuejs с помощью Javascript. У меня есть один компонент, который испускает EventBus для другого компонента. В компоненте отправителя у меня есть список индексов, которые идут один за другим к компоненту, оценивая, если это правда. Например:

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

На компоненте приемника я получаю список один за другим. Я делаю переключение, чтобы увидеть, когда я получаю значение 1 и возвращаю его в мой HTML в div с определенным CSS. В моем переключателе я отменяю шину событий, когда сталкиваюсь со значением 1 следующим образом:

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

Это просто работает нормально ... но моя проблема в том, когда я должен использовать это два или более раз в одном и том жестраница для разных дивов. Я хочу использовать одно и то же событие для всех элементов div, в противном случае код становится длиннее и длиннее, и когда я отменяю событие в одном элементе div, он отменяет события во всех них. У кого-нибудь есть идея вернуть значение 1 без отмены события, и если оно встретится, значение 1 перестанет видеть остальное?

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

Прежде всего, я категорически против использования шины событий, это похоже на то, что если вы вытащите из толпы оратора и закричите ГАБРИЭЛЯ, сколько Габриэль сможет услышать это сообщение и ответить, это эффект шины событий,крики и все могут услышать, это может быть большой проблемой для вашего приложения, я рекомендую использовать распространение событий, пока вы не доберетесь до идеального компонента через $ emits и свойства. Но чтобы остановить событие, необходимо вызвать событие. EventBus. $ Off ('событие-сообщение', nameFunctionAction);https://vuejs.org/v2/guide/components.html#Listening-to-Child-Components-Events

0 голосов
/ 26 октября 2019

Vue's 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...