加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular2 – 返回布尔值,订阅canActivate

发布时间:2020-12-17 10:19:01 所属栏目:安全 来源:网络整理
导读:我是Angular中的新手,我需要实现一个返回true / false的函数,我将在canActivate中使用return,但是这个函数使用http.get的api,所以就像通信是异步的一样,这个函数总是返回FALSE,因为http.get还在进行中. 我的班主任: canActivate(route: ActivatedRouteSnaps
我是Angular中的新手,我需要实现一个返回true / false的函数,我将在canActivate中使用return,但是这个函数使用http.get的api,所以就像通信是异步的一样,这个函数总是返回FALSE,因为http.get还在进行中.

我的班主任:

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;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读