Я только что столкнулся с проблемой, связанной с прослушиванием событий в директивах Vue. У меня есть компонент, внутри которого содержится следующий код:
function setHeaderWrapperHeight() { ... }
function scrollEventHandler() { ... }
export default {
...
directives: {
fox: {
inserted(el, binding, vnode) {
setHeaderWrapperHeight(el);
el.classList.add('header__unfixed');
window.addEventListener(
'scroll',
scrollEventListener.bind(null, el, binding.arg)
);
window.addEventListener(
'resize',
setHeaderWrapperHeight.bind(null, el)
);
},
unbind(el, binding) {
console.log('Unbound');
window.removeEventListener('scroll', scrollEventListener);
window.removeEventListener('resize', setHeaderWrapperHeight);
}
}
}
...
}
И этот компонент повторно отображается каждый раз, когда я меняю путь к маршрутизатору, я добился этого, назначив текущий путь маршрута для :key
prop, поэтому при изменении пути он повторно отображается. Но проблема в том, что прослушиватели событий не удаляются / не уничтожаются, что вызывает ужасные проблемы с производительностью. Итак, как мне удалить слушателей событий?
bind()
в функции была создана новая функция, и поэтому removeEventListener получал неправильную ссылку на функцию. Спасибо! - person thisismamatto   schedule 11.02.2020