2016-10-09 11 views
0

私のAngular2アプリケーションでは、canActivateを使用してページへのアクセスを許可しています。 これは、トークンが改ざんされていないことをサーバーにチェックすることです。そのため、天気を決定する前にユーザーにアクセスを許可することができます。私はAPIを呼び出す必要があります。 これはObservableに加入し、答えを待つことを意味します。観測可能なサブスクリプションを待っていますAngelar2

私はtrueまたはfalseを返す必要がありますが、私はasyns呼び出しを行うので、私は私の応答に基づいて返すことはできません。 私はそれがシングルスレッドなので、私は待つことができないことを実現するが、私は何かをブロックする必要があります私は、APIから戻る答えを持っているまで。次のように 私canActivateに見えます:

canActivate() { 
    this.guardClient.checkToken("token") 
    .subscribe(response => { 
    let responseText = response.text().replace(/"/g, ''); 
    if (responseText === 'Ok') 
    { 
     return true; 
    } 
    if(responseText === 'denied') { 

     this.router.navigate(['login']); // redirecting to login 
     return false; 
    } 
    }); 
} 

誰かがどのようにこの問題を解決するために教えてもらえます?

答えて

1

角度2でCanActivateインタフェースを見るとき、私は以下を参照してください。

export interface CanActivate { 
    canActivate(route: ActivatedRouteSnapshot, state:  RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean; 
} 

あなたが見ることができるように、あなただけのだけのbooleanとしても観察可能を返し、できません。 これはあなたのコードがこのように書き換えられる可能性があることを意味します。

canActivate() { 
return this.guardClient.checkToken("token") 
    .map(response => { 
    let responseText = response.text().replace(/"/g, ''); 
    if (responseText === ' Ok') 
     { 
     return true; 
     } 
    if(responseText === 'denied') { 
     this.router.navigate(['login']); // redirecting to login 
     return false; 
    } 
}); 
} 

これにより、経路が表示されるかどうかを判断する前に、観測可能な観測値が解決されるのを待つようになります。 このメソッドは、遅い負荷を避けるためにはかなり高速である必要があることに注意してください。

+0

ありがとうございました! :) – methgaard

関連する問題