1. ホーム
  2. angular

[解決済み] Angular 2 - ルーティング - ObservableでCanActivateする。

2022-12-13 07:13:26

質問

私は AuthGuard (ルーティングに使われる) を実装しており CanActivate .

canActivate() {
    return this.loginService.isLoggedIn();
}

私の問題は、CanActivate-result が http-get-result - に依存していることです。 ログインサービス オブザーバブル .

isLoggedIn():Observable<boolean> {
    return this.http.get(ApiResources.LOGON).map(response => response.ok);
}

CanActivateをバックエンドの状態に依存させるにはどうしたらよいでしょうか?

# # # # # #

EDIT: この質問は2016年のものであることに注意してください - 非常に初期の段階のangular/routerが使用されています。

# # # # # #

どのように解決するのですか?

angular/router を最新のものにアップグレードする必要があります。

AuthGuard.tsを修正します。

@Injectable()
export class AuthGuard implements CanActivate {
    constructor(private loginService: LoginService, private router: Router) {}

    canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
        return this.loginService
            .isLoggedIn()
            .map((e) => {
                if (e) {
                    return true;
                }
            })
            .catch(() => {
                this.router.navigate(['/login']);
                return Observable.of(false);
            });
    }
}

わからないことがあったら聞いてね