J'ai une directive qui permet de basculer l'état quand on clique dessus. Si l'état est actif et que l'utilisateur clique n'importe où sur la page, l'état doit être désactivé.Capture du prochain clic sur le document à partir de @HostListener (création dynamique d'un écouteur de clic) dans Angular 4
J'ai essayé d'y parvenir en utilisant la nouvelle fonction d'écoute Renderer2 pour générer dynamiquement un écouteur pour attraper le "clic suivant" - le problème ici est que la fonction de rappel s'exécute dès que l'écouteur est créé! Donc - un clic s'active, puis désactive immédiatement l'élément. Je cherche de l'aide pour comprendre pourquoi cela se passe et ce que je dois faire pour y remédier.
directive:
import { Directive, ElementRef, Input, Output, HostListener, EventEmitter, Renderer2 } from '@angular/core';
@Directive({
selector: '[emClickToClose]'
})
export class ClickToCloseDirective {
@Input('emClickToClose')
openCtrl: boolean;
@Output()
ctrlUpdate: EventEmitter<boolean> = new EventEmitter();
@HostListener('click', ['$event']) onClick(e: MouseEvent) {
this.openCtrl = !this.openCtrl;
this.ctrlUpdate.emit(this.openCtrl);
if (this.openCtrl) {
const removeRegisteredListener = this.renderer.listen('document', 'click',() => {
console.log('the document was clicked', this.openCtrl);
this.openCtrl = false;
this.ctrlUpdate.emit(this.openCtrl);
removeRegisteredListener();
});
}
}
constructor(private el: ElementRef, private renderer: Renderer2) {
}
}
Génial, c'était le problème! Merci –