【问题标题】:Returning value from BehaviorSubject in angular 6 guard从 Angular 6 防护中的 BehaviorSubject 返回值
【发布时间】:2018-10-27 09:29:24
【问题描述】:

我正朝着这个方向前进,因为我有另一个警卫正在验证先前存储的令牌上的用户。这就是我在以前版本的 rxjs 中所做的,现在在最新版本中你无法映射到这个主题。

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

我需要任何指导如何让这个东西工作。我已经尝试过这样的处理,但由于从未订阅过它,因此不会返回任何内容(当我 console.log 时,它也不是 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() 将其转换为可观察的,但不起作用。 我知道我错过了一些东西。 嘻嘻:)

【问题讨论】:

标签: javascript angular typescript rxjs behaviorsubject


【解决方案1】:

在您的身份验证服务中将您的 behaviorSubject 作为可观察对象返回:

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

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

还有一个小评论:CanActivate 与 observable 一起工作,所以如果你的 behaviorsubject 函数返回一个 boolean 类型的 Observable,你不需要映射它

【讨论】:

    猜你喜欢
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 2019-03-11
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多