html - Tıklayınca sınıfı dinamik olarak nasıl ekler ve 2 saniye sonra nasıl kaldırırsınız?


Sorumu nasıl doğru bir şekilde formüle edeceğimi bilmiyordum, bu yüzden kendimi burada açıklamaya çalışacağım:

Angular 7 uygulamamda, menü öğeleri olarak simgeler bulunan bir navigasyon çubuğum var.

Tıklandığında, onların belirli bir sınıfı almasını istiyorum ve sınıf 2 saniye sonra kaybolmalı.

7 elementim var, işte 2 tanesi örnek olarak:

        <li class="fushia-icon">
            <a routerLink="/savoir" routerLinkActive="fushia-icon-active" class="animated"
               [class.flip]="this.iconIsClicked" (click)="iconClicked(this.iconIsClicked = true)">
            </a>
        </li>


        <li class="beige-icon">
            <a routerLink="/diplomes" routerLinkActive="beige-icon-active" class="animated"
               [class.flip]="this.iconIsClicked" (click)="iconClicked(this.iconIsClicked = true)">  
            </a>
        </li>

ts dosyamda bunu yaptım :

 iconClicked(icon){
        setTimeout(()=> {
            icon = false
        }, 2000)
    }

Ama bu, benim istediğimi hiç yapmıyor çünkü ikisi de sınıfı alıyor ve iconIsClicked değeri, analiz edilecek elemana geri dönmüyor (bariz).

Her ikonun kendi şeylerine sahip olması için 7 değişkenle 7 fonksiyon oluşturabileceğimi biliyorum, ama kodu çoğaltmadan daha hızlı bir yol arıyorum.

Teşekkürler

Cevap #1

Bir şablon referans değişkeni kullanabilir ve ekleyip/çıkarabilirsiniz (Element.classList yöntemleri).

HTML

<li class="fushia-icon">
    <a #fushiaIcon class="animated" (click)="iconClicked(fushiaIcon)"></a>
</li>
<li class="beige-icon">
    <a #beigeIcon class="animated" (click)="iconClicked(beigeIcon)"></a>
</li>

TS

iconClicked(menuIcon: HTMLElement) {
    menuIcon.classList.add('flip');

    setTimeout(()=> {
        menuIcon.classList.remove('flip');
    }, 2000)
}

Cevap #2

Yani amaç, her menü için aynı yöntemi kullanmaktır. Buradaki basit seçim, istediğimizi kolayca gerçekleştirebilecek bir Direktif kullanmaktır.

Bence bu tür şeyleri şöyle hatırlayabilirsin: bir yönerge, görünümü kontrol etmeni sağlar

Bunu, her li üzerinde bir onClick olayına sahip bir HostListener kullanarak kolayca yapmayı başardım

Stackblitz'e buradan ulaşabilirsiniz

alıntı: class-changer.directive.ts

constructor(private _ren: Renderer2, private _el: ElementRef) { }

@HostListener('click') onClick() {
    this._ren.addClass(this._el.nativeElement, 'bg-red');
    setTimeout(() => {
      this._ren.removeClass(this._el.nativeElement, 'bg-red');
    }, 2000)
  }

DÜZENLE
Stackblitzimi güncelledim. Böylece sınıf ekleyip çıkarmak kolay!

İlgili makaleler