2016-12-30 2 views
0

Mein Animationstrigger hat drei Zustände: Void, True und False.Ist eine Statusänderung in Animationsauslösern ohne Klickereignis möglich?

Ich verwende ein Abonnement, um zu überprüfen, ob sich eine der Variablen geändert hat. Wenn es eine Änderung gibt, Zustandsänderungen wahr und Popup erscheinen wie in der folgenden Animation:

animations: [ 
     trigger('visibilityChanged', [ 
      state('void' , style({ opacity: 0})), 
      state('true' , style({ opacity: 1})), 
      state('false', style({ opacity: 0})), 
      transition('* => *', animate('.5s')) 
     ]) 
    ] 

ich das Popup nach kurzer Zeit verschwinden will (1 s), ohne ein Click-Ereignis oder eine Änderung auslöst.

+0

nur eine einfache setTimeout verwenden und r evert es zurück – Milad

+0

@Milad: setTimeout Ansatz funktionierte nicht für mich als nach Timeout, konnte ich nicht den HTML-Code zurück. Ich habe es auch mit Renderer versucht, aber es hat nicht funktioniert. –

Antwort

0

Sie einen Betreff für Ihr Abonnement nutzen könnten und dann abonnieren zweimal, um es:

  • eine Zeit, um die Änderung der Nähe für den Fang
  • eine Zeit für eine Entprellzeit von 1000, zum Beispiel, und dann Ihre modal

Dies ist ein Beispiel:

import {Component, OnInit} from '@angular/core'; 
import {Subject} from 'rxjs/Subject'; 

@Component({ 
    selector: 'selfclosing-popup', 
    templateUrl: 'etc.' 
    animations: [ 
    trigger('visibilityChanged', [ 
     state('void' , style({ opacity: 0})), 
     state('true' , style({ opacity: 1})), 
     state('false', style({ opacity: 0})), 
     transition('* => *', animate('.5s')) 
    ]) 
    ] 
}) 
export class SelfclosingPopup implements OnInit { 
    changeSubject = new Subject<boolean>(); 
    visibilityChanged: string;  

    ngOnInit(): void {  
    this.changeSubject.subscribe((change) => this.visibilityChanged = change); 
    this.changeSubject.debounceTime(1000).subscribe(() => this.visibilityChanged = false); 
    } 

    public notifyChange() { 
    this.changeSubject.next(true); 
    } 
} 
+0

Danke @Karbos, arbeitete für mich. Anstatt jedoch Subject zu verwenden, habe ich dasselbe Objekt zweimal mit einer Entprellzeit von 1000 ms abonniert. Danke für den Hinweis. –

Verwandte Themen