gpt4 book ai didi

Angular2 - 返回 bool 值并订阅 canActivate

转载 作者:太空狗 更新时间:2023-10-29 17:25:14 31 4
gpt4 key购买 nike

我是 Angular 的新手,我需要实现一个返回 true/false 的函数,我打算使用 canActivate guard 中的 return,但是这个函数通过 http.get 使用一个 api,所以就像通信是异步的这个函数总是返回 FALSE,因为 http.get 还在处理中。

我的类(class)守卫:

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;

}

我看了很多问题,但没有找到答案。

最佳答案

守卫打字说它可以返回

Observable<boolean>, Promise<boolean> or boolean

所以将 isLoggedIn 更改为:

isLoggedIn() {

return this.http.get('api/values', this.httpService.headers())
.take(1)
.map((res: Response) => res.json());
}

更新

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
let url: string = state.url;

return this.isLoggedIn().map(loggedIn => {
if(!loggedIn) {
this.loginService.redirectUrl = url;
this.router.navigate(['login']);
}
return loggedIn;
}
}

关于Angular2 - 返回 bool 值并订阅 canActivate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39772181/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com