6
私はAngularで新しく、true/falseを返す関数を実装する必要があります。canActivateガードでリターンを使用しますが、この関数はhttp.getによってapiを消費し、通信が非同期であるように、この関数は常にhttp.getが処理中であるため、FALSEを返します。Angular2 - canActivateに登録してブール値を返します
私のクラスのガード:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
let url: string = state.url;
if (this.loginService.isLoggedIn()) {
return true;
}
this.loginService.redirectUrl = url;
this.router.navigate(['login']);
return false;
}
と関数isLoggedIn()
isLoggedIn() {
let logged: boolean = false;
this.http.get('api/values', this.httpService.headers())
.map((res: Response) => {
logged = res.json();
});
return logged;
}
私は多くの質問を読んで、私は答えを見つけていません。
おかげキットが、この方法は私のAPIを呼び出すことはありませ。私が変更した場合:res.json()が呼び出されていますが、このapiが呼び出されている場合、this.http.get( 'api/values'、this.httpService.headers())subscribe(res => res.json())を返します。関数の値として返されました。関数の値としてサブスクライブの結果を返す方法 – Rit
私は自分の答えを編集しました。 map()では値を返しませんでした。今それは動作するはずです。 Subscribation not Observableを返すので、subscribe()を呼び出さないでください。 – kit
AFAIK最後に '.first()'や '.take(1)'を追加する必要がありますので、最初のイベントの後にオブザーバブルが閉じます。それ以外の場合、ルータは永遠に待機します。 –