Angular:为什么“ keydown”事件监听器会多次触发?

时间:2019-12-09 15:45:16

标签: angular addeventlistener event-listener

我在Angular应用的组件的构造函数中声明的事件侦听器中具有以下代码:

window.addEventListener('keydown, event => { console.log('key pressed'); });

当组件存在时,只要我按任意键就会触发此事件。问题是它会发射6次而不是一次。

我想知道的事情:

1)为什么它会多次发射?

2)如何使其仅发射一次?

1 个答案:

答案 0 :(得分:5)

不能肯定地说,但问题似乎是您每次在组件实例化时就手动注册一个事件侦听器,并且从不清除它,并且正在创建内存泄漏,使侦听器和组件永远不会被正确销毁。这就是为什么您不想手动执行此类操作并应由angular为您处理的原因的一部分:

@HostListener('window:keydown', [])
onWindowKeyDown() {
  console.log('keydown')
}

现在angular将可以处理您的侦听器的注册/注销。