我有一個使用canActivate guard保護的組件。 checkLogin
函數中的Authguard從一個observable訂閱,但我不知道如何從它返回一個布爾值到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,並且用戶應該能夠降落守衛路線上,但如果是假的他應該導航到error-user
。
Angular2 - return boolean with subscribe to canActivate這個問題與我的類似,但無法解決我的問題。
有人可以幫助這裏。
@Igor是重複仍然相關如果異步調用返回一個observable而不是promise? –
@DavidL - 我會這麼認爲。一個可觀察的事物只不過是一個更多的呼籲。也可以通過使用'.toPromise()'將observable轉換爲promise。 OP還表明他們可以訂閱observable,現在只需要他們瞭解如何使用回調的整個概念。 – Igor
@我的觀點是,它可能是相關的,但它不是完全相同的。有微妙之處,使它成爲一個可憐的重複選擇。 OP的鏈接問題實際上是一個更好的重複。 –