2017-03-28 8 views
0

私はすべてのストア選択値に対して自分のテンプレート内で非同期パイプを使用します。これは、サブスクライブを含め、すべてのクリーンアップをそれ自身で行います。Angular 2 Auth Gaurdはngrx store selectを使用しています。退会はできますか?

私はauth gaurdの値を手動で購読すると、これを購読解除する必要がありますか?はいの場合、それを行う最善の方法は何でしょうか?

@Injectable() 
export class AuthGaurd implements CanActivate{ 

constructor(
    private store: Store<fromRoot.State>, 
    private router: Router 
){} 

canActivate(){ 
    this.store.select(getLoggedInState).subscribe(res => { 
     if(res){ 
      return true 
     }else { 
      this.router.navigate(['/login']); 
     } 
    }); 
     return false; 
    } 
} 
+0

あなたは退会しなかったし、何をしようとしていますか? – Aravind

+0

@Aravind退会はどこでできますか?退会行はどこに行きますか? – notANerdDev

+0

あなたのガードを購読するべきではありません。githubのコメントのようなものを試してみてください。 https://github.com/ngrx/store/issues/270#issuecomment-260845982 – Adam

答えて

3

あなただけの最初の値を取得するためにtakeを使用する必要があります。

canActivate(){ 
    this.store.select(getLoggedInState).take(1).subscribe(res => { 
     if(res){ 
      return true 
     }else { 
      c this.router.navigate(['/login']); 
     } 
    }); 
     return false; 
    } 
} 

take(n)は、観察は、それが完全に、その後受信し、第1 n値を取ることができます。この場合、退会する必要はありません。

関連する問題