从角度6守卫中的BehaviorSubject返回值

时间:2018-05-17 07:40:40

标签: javascript angular typescript rxjs behaviorsubject

我正朝着这个方向前进,因为我的另一名警卫正在先前存储的令牌上验证用户。这就是我在之前版本的rxjs中所做的事情,现在是最新的关于这个主题的地图。

canActivate(next: ActivatedRouteSnapshot,
           state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
  return this.authservice.behaviorsubject().map(x => {
    if (x) {
      return true;
    } else {
      return false;
    }
  })
}

我需要任何指导如何使这件事工作。我尝试过像这样的事情,但是因为从来没有订阅过它,所以不会返回任何内容(当我登录时,它也不是一个Observable它的AnonymusSubject吧。)

canActivate(next: ActivatedRouteSnapshot,
           state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
  return this.authservice.behaviorsubject().pipe(
    map(x => {
      if (x) {
        return true;
      } else {
        return false;
      }
    })
  )
}

还尝试使用Observable.create()将其转换为observable,但不会工作。 我知道我错过了什么。 Heeeeelp:)

1 个答案:

答案 0 :(得分:0)

将您的behaviorSubject作为authservice中的observable返回:

private _authed: BehaviorSubject<boolean> = new BehaviorSubject(null);

behaviorsubject():Observable<boolean> {
   return this._authed.asObservable()
}

也是一个小注释:CanActivate适用于observable,所以如果你的behaviorubject函数返回一个类型为boolean的Observable,你就不需要映射它