Как удалить слушателя, привязанного к анонимной функции? - PullRequest
0 голосов
/ 09 апреля 2020

В моем компоненте у меня есть прослушиватель, подключенный к анонимной функции.

Как я могу удалить этого прослушивателя позже, так как нет имени функции для обозначения функции, прикрепленной к нему? *

mounted() {
  EventBus.$on('setStickyHeaderCaption', (payload) => {
    ...
  });
},
beforeDestroy() {
  EventBus.$off('setStickyHeaderCaption');
}

Ответы [ 3 ]

1 голос
/ 09 апреля 2020

Без сохранения ссылки на функцию нет пути.

Вы можете сделать что-то вроде этого:

mounted() {
  this.anon = (payload) => {
   ...
  }
  EventBus.$on('setStickyHeaderCaption', this.anon);
},
beforeDestroy() {
  EventBus.$off('setStickyHeaderCaption', this.anon);
}
0 голосов
/ 09 апреля 2020

Прослушиватель событий обычно идентифицируется предоставленной функцией. Если функция анонимная, слушатель не может быть удален.

Это относится к методу Vue. Методы уже привязаны к экземпляру Vue и не должны быть стрелками:

methods: {
  setStickyHeaderCaptionHandler(payload) {...}
},
mounted() {
  EventBus.$on('setStickyHeaderCaption', this.setStickyHeaderCaptionHandler);
},
beforeDestroy() {
  EventBus.$off('setStickyHeaderCaption', this.setStickyHeaderCaptionHandler);
}

То, что методы доступны вне компонента и могут быть шпионскими или поддельными, также облегчает тестирование.

0 голосов
/ 09 апреля 2020

Вы не можете.

Невозможно окончательно определить, какого слушателя вы уничтожите, потому что, как вы выразились, вы использовали анонимную функцию в качестве обратного вызова.

...