2017-02-15 4 views
0

イベントリスナは、ルートパスが変更されたときに実行されます。最初に実行されたときにのみ、リスナ内で数行のコードを実行します。条件付きでこれをやろうとしています。コードはcatchブロックに入るとき角度2のルータイベントリスナーは何らかの閉鎖を形成しますか?

.catch((error: any) => { 
    console.log("inside catch block"); 
    this.catchFlag = true; 
     this._router.events.subscribe(
      (event) => { 
      if (event instanceof NavigationEnd) { 
       console.log("catch flag in subscription ", this.catchFlag); 
       if (this.catchFlag === true) { 
        this.catchFlag = false; 
        // some code here 
       } 
      } 
      }); 
     return Observable.throw(error); 
    }); 

私は、コードがキャッチブログに入っていないが、ルート変更イベントがトリガされたとき、私は、サブスクリプション内のコードを実行したくない、ルーターパスの必要性を持っていますそれ。しかし、たとえルータイベントであっても、catchFlagの値はtrueとなりますが、最初のエントリでfalseとなります。これはどのように動作するはずですか?はいの場合、条件付きでこれを実行する方法は何ですか?

答えて

0

はい、実際にコードがcatchブロックに繰り返し入力されると、クロージャが形成されていました。

私は、サブスクリプションの変数ました:

this.routerSubscription = this._router.events.subscribe(...) 

を、私は.catch()を入力するたびに、私はそれを解除。 コードは次のようになります。

.catch((error: any) => { 
    if (this.routerSubscription){ 
     this.routerSubscription.unsubscribe(); 
    } 
    this.routerSubscription = this._router.events.subscribe(...); 
    return /.../ 
}) 
関連する問題