Zapobieganie propagacji linków w Angularze.

Czasami potrzebujemy zapobiec propagacji po kliknięciu w linki. Np w ostatnim projekcie miałem do zakodowania przypadek gdzie klikanie w dane punkty ma otwierać jakiś box, przy czym klient wymagał aby klikając w tło, zamykać już istniejące. Ok można użyć (click)=”closeBoxes()” na elemencie div rodzica ale wtedy klikając w w/w punkty, wykonują się dwa kliknięcia. Pierwsze do otworzenia boxa a drugie do jego zamknięcia. Efektem jest to że nie zauważymy nic.

Jest na to rowziązanie. Trzeba zatrzymać propagację – sorry za tłumaczenie 🙂

Mamy strukturę w template:

<div class="container" (click)="closeBoxes()">
        <a class="container-box-button" (click)="toggleOpen()">Open/Close</a>
        <div class="container-box-content" *ngIf="isVisibleBox">Content</div>
</div>

Rozwiązanie tego problemu jest przekazanie parametru $event

<div class="container" (click)="closeBoxes()">
        <a class="container-box-button" (click)="toggleOpen($event)">Open/Close</a>
        <div class="container-box-content" *ngIf="isVisibleBox">Content</div>
</div>

Oraz w metodzie użycie tego parametru.

toggleOpen(e:Event) {
    e.stopPropagation();
    isVisibleBox =!isVisibleBox;
}

I to tyle powinno wystarczyc 🙂


Opublikowano

w