我有一个简单的vuejs
指令,可以在装载时向多姆元素添加事件监听器.我的问题是,我真的需要在稍后卸载该元素之前删除该事件监听器吗?无论如何,该元素最终都会从多姆中删除,但将监听器留在原地是否会继续消耗内存?
我的指令如下.如果我不需要清理事件监听器,它会更加简化.
/**
* Show a confirmation popup when the element is clicked.
*/
const NAME = 'vConfirm'
let id = 0;
export default {
beforeMount(el, binding) {
id++;
// save event handler on element, so it can be cleaned up when its unmounted; is this even needed since the
// element is being removed from the DOM when it's unmounted?
el[`${NAME}${id}`] = (e) => {
const message = binding.value || 'Are you sure?';
if (!window.confirm(message)) {
e.preventDefault();
e.stopPropagation();
}
}
el.addEventListener(binding.arg ?? 'click', el[`${NAME}${id}`], true);
},
beforeUnmount(el, binding) {
el.removeEventListener(binding.arg ?? 'click', el[`${NAME}${id}`])
delete el[`${NAME}${id}`];
}
}