Попробуйте лучше так, вместо HostListener
ngOnInit() {
fromEvent(document, 'click')
.pipe(debounceTime(300))
.subscribe((event) => {
const targetElement = event.target;
if(!targetElement) {
return;
}
const clickedInside = this.elementRef.nativeElement.contains(targetElement);
if(!clickedInside) {
this.clickOutside.emit(event);
}
});
}
Зачастую все глюки в подобных делах начинаются, когда слушатели вешаются в момент, когда компонент еще даже не нарисовался и клик не закончился.
И лучше это все таки директивой, а не в компоненте.