У меня есть компонент «Карта», который прослушивает внешнее событие щелчка или прокрутки и уничтожается при возникновении этого события.
@HostListener('document:mousedown', ['$event'])
public onEvent(e: Event): void {
let el = this.elementRef.nativeElement;
if (e.target !== el && !el.contains(e.target)) {
this.destroyCard();
}
}
ngAfterViewInit() {
document.addEventListener('scroll', this.onEvent, true);
}
Проблема возникает, когда из этого компонента я создаю модальное окно, которое создается снаружиэтот компонент в корне представления приложения.Когда я нажимаю на модальное окно или прокручиваю его, компонент моей карты уничтожается вместе с модальным окном.
Вот песочница stackblitz с щелчком .При нажатии на модальное окно оно должно остаться.
ОБНОВЛЕНО .Исправлено с помощью event.stopPropagation ().
Но это не работает для таких событий, которые обычно не пузырьковые, как прокрутка.Пожалуйста, посмотрите stackblitz с прокруткой .
Я вижу только одно решение: создать сервис, который будет прослушивать события, и мой компонент Card и компонент модального окна будут подписываться и добавлять их узлы в массив, который будетпроверил, находится ли цель события внутри этих узлов или нет.
Может, кто-нибудь знает лучшее решение?