2016-12-30 7 views
0

私のアニメーショントリガーには、3つの状態: Void、Trueおよびfalseがあります。クリックイベントが発生していないアニメーショントリガーで状態変更が可能ですか?

サブスクリプションを使用して、いずれかの変数に変更があるかどうかを確認しています。変更がある場合は、真のポップアップへの状態変化は、次のアニメーションごとのように表示されます。

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

私は、このポップアップは任意のクリックイベントや変更をトリガすることなく、短時間(1秒)の後に消えたいです。

あなたのサブスクリプションの件名を使用し、それに2回を購読することができ
+0

は単純なのsetTimeoutとrを使用 – Milad

+0

@Milad:タイムアウト後にsetTimeoutのアプローチが私のために働いていなかったので、HTMLを元に戻すことができませんでした。私はレンダラーを使って同じことを試みましたが、それは私にとってはうまくいかなかったのです。 –

答えて

0

:近く続い

  • 1時間を例えば、1000年のデバウンス時間変更に
  • 1時間をキャッチするために、そしてあなたのモーダル

これは一例です:

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

ありがとう@カルボス、私のために働いた。しかし、Subjectを使用する代わりに、私は1000msのデバウンス時間で同じ観測可能なものを2回購読しました。アドバイスをいただきありがとうございます。 –

関連する問題