【发布时间】:2018-03-27 05:31:00
【问题描述】:
我已经构建了一个指令,它使用主机事件侦听器订阅键盘事件。当按下转义键时,我正在触发这样的输出事件
@HostListener('document:keyup', ['$event'])
handleKeyboardEvent(kbdEvent: KeyboardEvent) {
if (kbdEvent.keyCode === 27) {
this.CloseEvent.emit();
}
}
我对子元素有这个指令。当按下转义键时,我只想为新订阅的元素触发输出事件。问题是当我单击转义键时,事件会根据层次顺序触发。我这里做了一个demo:https://plnkr.co/edit/FfnHAtxl2zcHsu0JilKt
重现步骤:
- 添加多个子元素
- 点击Escape它会关闭所有元素
预期行为:
- 当在最后添加的子元素上点击Escape时,需要触发事件
【问题讨论】:
-
因为你正在这样做
'document:keyup'指令的每个实例都会为 keyup 添加一个全局事件监听器,所以无论你在哪里按下一个键,它都会在指令的所有实例上发出。在此处查看控制台plnkr.co/edit/9paiFapxVf2yaB6uPAnc?p=preview -
你是对的。有什么方法可以先触发最近添加的订阅实例并停止事件传播,以避免其他实例停止触发?
标签: angular