認証ステータスを確認する必要がありますが、観測可能な復帰が完了する前にteコードは完了しています。その結果、不潔なものになるでしょう。私は、コードが戻る前に認証ステータスを取得するために完了するために、観察を待つので、私はこのコードを変更する方法を角度2+メソッド/観測が完了するまで待ちます
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
this.isAuthenticated();
return this.authenticated;
}
isAuthenticated(){
this.loginService.isAuthenticated()
.subscribe(status => this.authenticated = status)
}
。
注:以下に示すように角度canActivate方法は私がコードを記述することはできません:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
this.loginService.isAuthenticated()
.subscribe(status => {
this.authenticated = status;
return this.authenticated;
});
}
これはfollowinエラーが生じる:
Class 'AuthGuard' incorrectly implements interface 'CanActivate'.
Types of property 'canActivate' are incompatible. Type '(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => void' is not assignable to type '(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => boolean | Observable | Pr...'. Type 'void' is not assignable to type 'boolean | Observable | Promise'.
このための解決策のために提案エラーも役に立ちます。
canActivateではなく、観察可能で、trueまたはfalseを返す必要があり、これは可能ですか? – phicon
また、購読するとバックエンドは常に返されます。正しいか間違っているか。 Subscribe()メソッドを追加してもいいですか? – phicon
@phiconこれはまさにあなたのエラーメッセージが言っているものです、 'boolean |観察可能な|約束する。ブール値、ブール値の可観測値、またはブール値の約束を返します。 'this.authenticated'は元のコードでは定義されていません。 – estus