[英]Angular2 - Is it possible to use variable string for HostListener?
I don't think it is possible but I prefer to ask (just in case): Is it possible to do something like : 我不认为这是可能的,但我更愿意问(以防万一):是否可以这样做:
@Directive({
selector: '[appTag]'
})
export class TagDirective {
@Input() appTag: TagEvent;
private _tagTriggerEvent = 'click';
@Input() set tagTriggerEvent(triggerEvent: string) {
this._tagTriggerEvent = triggerEvent || this._tagTriggerEvent;
}
constructor(private el: ElementRef, private renderer: Renderer) {
}
@HostListener(this._tagTriggerEvent) onTriggerEvent() {
if (this.appTag) {
this.sendTag(this.appTag);
}
}
sendTag(tagParam: TagEvent) {
...
}
}
And call it like that : 并称之为:
<div [appTag]="myTagParam">Watch for click on this div</div>
<div [appTag]="myTagParam" [tagTriggerEvent]="mouseenter">Watch for mouseenter on this div</div>
That's not supported. 这不受支持。 These decorators are evaluated at build time.
这些装饰器在构建时进行评估。
You can use 您可以使用
constructor(private renderer:Renderer, private elementRef:ElementRef) {}
private tagTriggerEventRegistration:Function;
@Input() set tagTriggerEvent(event:string) {
if(this.tagTriggerEventRegistration) {
this.tagTriggerEventRegistration(); // cancel previous listener
}
this.tagTriggerEventRegistration = this.renderer.listen(this.elementRef.nativeElement, event, (event) => { onTriggerEvent(e);});
}
See also Dynamically add event listener in Angular 2 另请参见在Angular 2中动态添加事件侦听器
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.