2017-11-09 30 views
0

ルータオブジェクトをインスタンス化しようとしていますが、ユーザがsetTimeoutを使用して権限のない場合はログインするようにナビゲートしています。問題は、私が以下のコードシステムを使用している場合です。ルータ2のsetTimeoutメソッド内でrouter.navigateを使用できません

setTimeout(()=>this.router.navigate(['/login']),3000); 

しかし、私は

setTimeout(this.navigateToLogin,3000); 

にこの行を変更し、

navigateToLogin(){ 
    console.log("i am in navigate"); 
    this.router.navigate(['/login']); 
} 

を追加するとき、私は以下のエラーを取得します。私は混乱しています。任意の助けいただければ幸い..

TypeError: Cannot read property 'navigate' of undefined 

グローバルエラーハンドラ

handleError(error){ 

     console.log(error); 
     this.router = this.injector.get(Router) 
     switch(error.status){ 
      case ErrorCodes.UNAUTHORIZED_USER:{ 
       this._msgService.emitGlobalMessage(new EGlobalModal("Error","Unauthorized User, You will be directed in 3 seconds",false,"red")); 
       //setTimeout(()=>this.router.navigate(['/login']),3000); 
       setTimeout(this.navigateToLogin,3000); 
       break; 
      } 
      default:{ 
       this._msgService.emitGlobalMessage(new EGlobalModal("Error",error,false,"red")); 
       break; 
      } 

     } 


    } 

テーマに関するウェブ上の混乱を招く情報がたくさんあります。私はそれがfunction(){}とarrow functionの違いだと理解しています。しかし、私は説明が必要です。事前に感謝します

答えて

1

私はあなたが参照エラーがあると思う。 2番目のメソッドを使いたい場合は、メソッド呼び出しに 'this'をバインドする必要があります。それ以外の場合は、setTimeoutを参照しています。

setTimeout(this.navigateToLogin.bind(this),3000);

関連する問題