Я использую angular11 для написания своего проекта
во многих случаях я хочу, чтобы кнопка имела диалоговое окно подтверждения, поэтому вместо создания для нее всплывающего окна mat-dialog
я хочу создать директиву, которая при добавлении к элементу кнопки будет отображать всплывающее окно с настраиваемым сообщением с да / нет кнопки, и только если пользователь щелкнет "да", произойдет фактическое событие щелчка.
так что пока я просто пытаюсь отключить событие щелчка, чтобы посмотреть, работает ли система ... а это не так :) даже щелчок все еще выполняется.
это моя директива:
import {Directive, ElementRef} from '@angular/core';
@Directive({
selector: '[comTuxinConfirm]'
})
export class TuxConfirmDirective {
constructor(el: ElementRef) {
el.nativeElement.addEventListener('click', this.clickEventHandler);
}
clickEventHandler(e: MouseEvent): boolean {
e.preventDefault();
e.stopPropagation();
return false;
}
}
и вот как я его использую:
<button *ngIf="actionLabel" comTuxinConfirm mat-button (click)="onActionClicked()">{{actionLabel}}</button>
когда я отлаживаю, я вижу, что мой обработчик событий для comTuxinConfirm
выполняется первым, до onActionClicked()
, но тем не менее он продолжает выполнять фактическое действие.
здесь есть какое-то состояние гонки, потому что, если я создаю точки останова и оба местоположения, он останавливается. так что я думаю, это неправильный способ сделать это.
есть идеи, как это правильно реализовать?
Благодарность