角度指令,无法将事件侦听器附加到元素

时间:2019-11-14 17:26:21

标签: angular angular2-directives

我尝试将keyup事件绑定到属性指令内的输入元素。 我尝试使用element.nativeElement.onkeyupelement.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);
    }
}

这是怎么回事?

1 个答案:

答案 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绑定事件。您只需要在输入上使用指令选择器即可。