Ich habe eine Direktive, die ein Untermenü bei Klick öffnet, aber ich möchte es nur durch den Klick auf Dokumentenklick zu verbessern, wenn das Zielelement angeklickt wurde. Die Frage ist also, diese Direktive zu verbessern oder Host-Listener dynamisch hinzuzufügen.Angular 2 dynamisch Host-Listener in Direktiven hinzufügen
import { Directive, HostListener, Input, AfterContentInit, ElementRef, ViewContainerRef, ContentChild } from '@angular/core';
@Directive({
selector: '[appSubMenu]'
})
export class SubMenuDirective implements AfterContentInit {
private visible: boolean = false;
@ContentChild('subMenu') child: ElementRef;
constructor(private vcRef: ViewContainerRef) { }
ngAfterContentInit() {
this.child.nativeElement.style.display = 'none';
}
@HostListener('document:click', ['$event', '$event.target'])
show(event:MouseEvent, targetElem: HTMLElement): void {
if (this.vcRef.element.nativeElement === targetElem && !this.visible) {
this.child.nativeElement.style.display = 'block';
this.visible = true;
} else {
this.child.nativeElement.style.display = 'none';
this.visible = false;
}
}
}