2017-04-19 17 views
2

私はcanActivateガードで保護されたコンポーネントを持っています。 checkLoginのAuthguard関数は観測値からサブスクライブしますが、boolean値をcanActivateに戻す方法はわかりません。canActivateにサブスクライブする代わりにブール値を返します

guard.service.ts

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { 
    let url: string = state.url; 

    return this.checkLogin(url); 
    } 

    public checkService:boolean; 
    checkLogin(url: string):boolean { 

     return this.loadAppSettings().subscribe(res=>{ 
       console.log(this.checkservice); 
       if (this.checkservice == true) 
       { 
        return true; 
      } 
      else{ 
       this.router.navigate(['/error-user']); 
       return false; 
      } 
      }); 
     }//checkLogin throws error as type subscription is not assignable to type boolean 

それでは、私が欲しいのはthis.checkServiceがtrueの場合、それだけでtrueを返す必要があり、それがfalseの場合、ユーザーが守られた経路に着陸することができるはずですがあります彼はerror-userにナビゲートする必要があります。

Angular2 - return boolean with subscribe to canActivateこの質問は私のものと似ていますが、問題を解決できませんでした。

誰か助けてもらえますか?

+0

@Igorは、非同期呼び出しが約束の代わりにオブザーバブルを返す場合、依然として関連する重複ですか? –

+0

@DavidL - 私はそう思います。観察可能なことは、それ以上の呼び出しを約束することである。また、 '.toPromise()'を使って、観測可能なものを約束に変換することもできます。またOPは、観察可能なものを購読できることを示しましたが、現在はコールバックの概念全体の使い方を理解するだけです。 – Igor

+0

@Igor私の主張は関連するかもしれないが、正確な複製ではないということです。それは貧しい二重の選択肢にする微妙さがあります。 OPのリンクされた質問は実際にはるかに優れた複製です。 –

答えて

5

canActivateも観測可能な値を返すことができます。定義はCanActivate-interfaceです。それに応じて返品の種類を変更してください。

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> { 
    let url: string = state.url; 

    return this.checkLogin(url); 
} 

public checkService:boolean; 
checkLogin(url: string):Observable<boolean> { 
    return this.loadAppSettings().map(res=>{ 
      console.log(this.checkservice); 
      if (this.checkservice == true) 
      { 
       return true; 
     } 
     else{ 
      this.router.navigate(['/error-user']); 
      return false; 
     } 
    }); 
    } 
+0

「タイプサブスクリプションはタイプオブザーバブルに割り当てられません」と言われました

+0

@AakashThakur - ごめんなさい。 – Igor

+1

ありがとうalotイゴール。 –

関連する問題