Angular Directive,不能将事件侦听器附加到元素上

问题描述 投票:0回答:1

我尝试将keyup事件绑定到属性指令内的输入元素。我已经尝试过像element.nativeElement.onkeyupelement.nativeElement.addEventListener('keyup', () => {})这样的常规方式,但是当我键入内容时,什么也没发生。

现在,我尝试使用HostListener这样编写代码

@HostListener('keyup', ['$event']) onKeyup(e) {}

UPDATE

事实证明,@ 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);
    }
}

这次出了什么问题?

angular angular2-directives
1个回答
2
投票

为按键事件指定指令:

@Directive({
  selector: "[app-key-press]"
})
export class KeyupDirective {
  @HostListener("keyup", ["$event"]) onKeyUp(event: KeyboardEvent) {
    console.log(event);
  }
}

并在输入中使用它:

<input type="text" app-key-press />

在主机侦听器中,您有onKeyup,应为onKeyUp

这就是您所需要的。不要使用element.nativeElement.onkeyup绑定事件。您只需要在输入上使用指令选择器即可。

© www.soinside.com 2019 - 2024. All rights reserved.