我在directive
字段中附加了input
,两者都在监听keydown
事件,在某些情况下,我想停止在{{1 }}。调用directive
并不能真正阻止传播。
示例:
指令
event.stopImmediatePropagation();
带有输入字段的组件
import { Directive, HostListener } from '@angular/core';
@Directive({ selector: '[myDirective]' })
export class MyDirective {
constructor() { }
@HostListener('keydown', ['$event'])
keydownHandler(event) {
event.stopImmediatePropagation(); // seems to be not working!!
console.log('[my-directive.ts]: keydownHandler', event)
}
}
我不明白为什么import { Component, Input } from '@angular/core';
@Component({
selector: 'hello',
template: `
<input type="text" myDirective (keydown)="keydownHandler($event)">
`
})
export class HelloComponent {
@Input() name: string;
keydownHandler(event) {
console.log('[hello.component.ts]: keydownHandler', event)
}
}
不起作用,有什么想法吗?是否有另一种方法可以避免使用event.stopImmediatePropagation();
字段在keydown
上触发component
?
答案 0 :(得分:1)
Angular优化了事件处理程序,如果您对同一事件有两个或多个处理程序,它将仅添加一个侦听器并将结果分配到所有组件。这意味着stopImmediatePropagation
现在取决于角度调度顺序。您可以添加日志记录或调试执行顺序。