Vuejs Eventbus запускается несколько раз из-за импорта импорта веб-пакетов?

1

В проекте vuejs я использую vue eventbus следующим образом. Выпуская это событие:

  icontag.addEventListener('click', testFunction, false)

  function testFunction () {
    console.log('click1')
    Events.$emit('click2')
  }

И, получив его в другом модуле, я получаю как вывод один click1, но несколько click2. Он очень похож на каждый раз, когда есть какой-то код, который требует, чтобы импорт/экспорт веб-пакета вызывал дополнительный результат в eventbus того же события... или что-то..., поскольку в chrome devtools связанный код близок к click2 имеет код, например __WEBPACK_IMPORTED_MODULE_5__util.

Любая идея, что происходит?

EDIT: Я думаю, что это могла быть "испорченная настройка горячей перезагрузки". После восстановления сборки hot-reload для разработчиков проблема теперь исчезла. Все еще интересовался подобным опытом, поскольку проблема была довольно уродливой и настойчивой.

  • 1
    Вероятно, более вероятно, что код никогда не удаляет обработчик. Если компонент, который добавляет обработчик, создается / монтируется несколько раз, не удаляя обработчик, то вы получите такое поведение.
Теги:
vue.js
vuejs2
webpack
events

1 ответ

1
Лучший ответ

Я думаю, что комментарий Берт прав. Вы можете зарегистрировать много раз те же обработчики событий в одном и том же событии.

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

icontag.removeEventListener("click", testFunction);
icontag.addEventListener('click', testFunction, false)

function testFunction () {
  console.log('click1')
  Events.$emit('click2')
}
  • 0
    Да, это должно было быть, так как количество событий только увеличивалось (время от времени), так что тогда оно должно было как-то зарегистрироваться снова и т. Д.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню