我尝试将keyup
事件绑定到属性指令内的输入元素。
我尝试使用element.nativeElement.onkeyup
或element.nativeElement.addEventListener('keyup', () => {})
之类的常规方法,但键入时什么也没发生。
现在,我尝试使用HostListener
编写这样的代码
@HostListener('keyup', ['$event']) onKeyup(e) {}
更新
结果证明,@ HostListener必须是顶级的才能工作。但是,当我在输入上键入内容时,什么也没有发生。这是指令的完整代码。
import { Directive, ElementRef, OnInit, HostListener } from '@angular/core';
@Directive({
selector: '[appKeyUp]'
})
export class KeyUpDirective implements OnInit {
constructor(private el: ElementRef) { }
ngOnInit() {
console.log('directive initiated');
}
@HostListener('keyup', [$event]) onKeyUp(e) {
console.log(e);
}
}
这是怎么回事?
答案 0 :(得分:2)
为按键事件指定指令:
@Directive({
selector: "[app-key-press]"
})
export class KeyupDirective {
@HostListener("keyup", ["$event"]) onKeyUp(event: KeyboardEvent) {
console.log(event);
}
}
并在输入中使用它:
<input type="text" app-key-press />
这就是您所需要的。不要使用element.nativeElement.onkeyup
绑定事件。您只需要在输入上使用指令选择器即可。