私は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この質問は私のものと似ていますが、問題を解決できませんでした。
誰か助けてもらえますか?
@Igorは、非同期呼び出しが約束の代わりにオブザーバブルを返す場合、依然として関連する重複ですか? –
@DavidL - 私はそう思います。観察可能なことは、それ以上の呼び出しを約束することである。また、 '.toPromise()'を使って、観測可能なものを約束に変換することもできます。またOPは、観察可能なものを購読できることを示しましたが、現在はコールバックの概念全体の使い方を理解するだけです。 – Igor
@Igor私の主張は関連するかもしれないが、正確な複製ではないということです。それは貧しい二重の選択肢にする微妙さがあります。 OPのリンクされた質問は実際にはるかに優れた複製です。 –