169 похожих чатов

Всем привет. Написал директиву "ClickOutside" с методом: @HostListener('document:click', ['$event']) click(event) {

if (!this.element.nativeElement.contains(event.target)) {
console.log('clicked outside', event.target) ...;
} else {
console.log('clicked inside', event.target);
}
}

повесил её на элемент что-то в духе:


<div appClickOutside ...>
<div (click)="isOpen=!isOpen">
<ng-container [ngSwitch]="isOpen">
<div *ngSwitchCase="true">...</div>
<div *ngSwitchCase="false">...</div>
</ng-container>
</div>
</div>

Соответственно клик на *ngSwitchCase="true" приводит к замене элемента на *ngSwitchCase="false", и в момент вычисления клика в @HostListener event.target уже не в доме.

Я нагуглил два решения такой проблемы:
1) в Material кладут div с z-index на один меньше целевого элемента, который собирает все клики вне элемента(это блокирует клик на другие такие же элементы, что ощущается очень ущербно)
2) народ ставит костыли из setTimeout

Кто как решает проблему автоматического закрывания оверлеев по клику вне?

3 ответов

29 просмотров

Вычислять кликОутсайд не в директиве, а в компоненте, где и обрабатывается клик. Собственно и делать это вычисление до того как метод поменяет тру на фолс

А поч просто не сделать компонент - модалку, внутри которого уже лежит компонент с тем что нужно

когда-то я пытался решить такую проблему) в итоге заюзал ngx-clickout

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта