如何从类似于 (click)="handler()" 的自定义指令触发组件函数?
How would I trigger a component function from a custom directive similar to (click)="handler()"?
我有一个名为 enterListener 的自定义事件指令,定义如下
import { Directive, EventEmitter, Output, HostListener } from "@angular/core";
@Directive({
selector: '[enterListener]'
})
export class EnterKeyDirective {
@Output() emitter: EventEmitter<any> = new EventEmitter();
@HostListener('keyup', ['$event'])
onEnter($event: any) {
if ($event.key === 'Enter') {
this.emitter.emit($event);
}
}
}
它在我的 html 中实现,就像这样
<input (enterListener)="search()" id="searchBar" [(ngModel)]="searchValue" class="card-img" type="text" placeholder="Search" />
我想要完成的基本上是 (click) 事件侦听器所做的,如果特定的事情发生,点击,执行特定的功能。对于我的指令,如果用户按下回车键,则执行我调用的方法 search()
.
现在,在任何键上,我都成功地进入了我的指令,该指令存在于与我的组件文件分开的文件中。并在按下回车键时成功识别。
但它不会触发我的 search()
功能。我缺少什么让指令识别出附加了一个事件处理程序,类似于 (click)="aMethod()" 的功能?
尝试将您的 HTML
替换为这样的东西
<input (keyup)="search()" id="searchBar" [(ngModel)]="searchValue" class="card-img" type="text" placeholder="Search" />
如果真的要使用指令,需要绑定指令中声明的事件发射器的名称
<input [enterListener] (emitter)="search($event)" id="searchBar" [(ngModel)]="searchValue" class="card-img" type="text" placeholder="Search" />
否则,按照建议,您可以直接在组件模板中检查输入元素上的 keyup
我有一个名为 enterListener 的自定义事件指令,定义如下
import { Directive, EventEmitter, Output, HostListener } from "@angular/core";
@Directive({
selector: '[enterListener]'
})
export class EnterKeyDirective {
@Output() emitter: EventEmitter<any> = new EventEmitter();
@HostListener('keyup', ['$event'])
onEnter($event: any) {
if ($event.key === 'Enter') {
this.emitter.emit($event);
}
}
}
它在我的 html 中实现,就像这样
<input (enterListener)="search()" id="searchBar" [(ngModel)]="searchValue" class="card-img" type="text" placeholder="Search" />
我想要完成的基本上是 (click) 事件侦听器所做的,如果特定的事情发生,点击,执行特定的功能。对于我的指令,如果用户按下回车键,则执行我调用的方法 search()
.
现在,在任何键上,我都成功地进入了我的指令,该指令存在于与我的组件文件分开的文件中。并在按下回车键时成功识别。
但它不会触发我的 search()
功能。我缺少什么让指令识别出附加了一个事件处理程序,类似于 (click)="aMethod()" 的功能?
尝试将您的 HTML
替换为这样的东西
<input (keyup)="search()" id="searchBar" [(ngModel)]="searchValue" class="card-img" type="text" placeholder="Search" />
如果真的要使用指令,需要绑定指令中声明的事件发射器的名称
<input [enterListener] (emitter)="search($event)" id="searchBar" [(ngModel)]="searchValue" class="card-img" type="text" placeholder="Search" />
否则,按照建议,您可以直接在组件模板中检查输入元素上的 keyup