我在Angular应用的组件的构造函数中声明的事件侦听器中具有以下代码:
window.addEventListener('keydown, event => {
console.log('key pressed');
});
当组件存在时,只要我按任意键就会触发此事件。问题是它会发射6次而不是一次。
我想知道的事情:
1)为什么它会多次发射?
2)如何使其仅发射一次?
答案 0 :(得分:5)
不能肯定地说,但问题似乎是您每次在组件实例化时就手动注册一个事件侦听器,并且从不清除它,并且正在创建内存泄漏,使侦听器和组件永远不会被正确销毁。这就是为什么您不想手动执行此类操作并应由angular为您处理的原因的一部分:
@HostListener('window:keydown', [])
onWindowKeyDown() {
console.log('keydown')
}
现在angular将可以处理您的侦听器的注册/注销。