나는 클릭 할 때 상태를 토글하는 지시문이 있습니다. 상태가 활성화되어 있고 사용자가 페이지의 다른 곳을 클릭하면 상태가 비활성화되어야합니다.각도 4로 @HostListener (클릭 리스너를 동적으로 생성)에서 문서를 클릭 한 다음 캡처
새로운 Renderer2 수신 기능을 사용하여 "다음 클릭"을 잡아내는 수신기를 동적으로 생성하려고 시도했습니다. 여기에서 문제는 청취자가 생성되는 즉시 콜백 기능이 실행된다는 것입니다. 한 번 클릭하면 활성화 된 다음 즉시 요소가 비활성화됩니다. 나는 왜 이런 일이 일어나고 있는지 그리고 내가 그 문제를 해결하기 위해해야 할 일을 이해하는 데 도움을 찾고 있습니다.
지침 : 부모의 자녀에서
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) {
}
}
신난다, 이것이 문제가되었습니다. 고마워요. –