Angular 7:Rxjs行为主题订阅无法在页面重新加载上使用,但可以在路线导航中使用

在我的标头组件中。

ngOnInit() {
    this.authService.getUser((data)=>{
      this.authService.userInfo.next(data)

    })
}

authService.ts

export class AuthService {

  userInfo= new BehaviorSubject<any>(null);

}

在另一个组件中,我正在ngOnInit中订阅变量

ngOnInit() {
 this.auth.userInfo.subscribe((data)=>{
      this.userInfo = data.user;
      console.log('user data subsribed ',this.userInfo)
    })  

}

这在路线导航上正常工作,但是当我重新加载页面时,订户未触发

jun8888888 回答:Angular 7:Rxjs行为主题订阅无法在页面重新加载上使用,但可以在路线导航中使用

userInfo 有可能在被订阅之前发出。这意味着订阅组件错过了数据。我建议改用ReplaySubject。它保存了数据,后期订阅组件仍然可以获取。

,

您不订阅this.authService.getUser()函数。 userInfo已订阅,但没有触发getUser()函数。

在此示例中,我不知道它在导航时何时起作用。

但是您不是通过引入behaviourSubject使其变得太复杂了吗?你需要这个吗?如果是因为要缓存getUser调用的结果,则最好添加

getUser() => this.http.get<UserInfo>().pipe(share())

或引入一个变量:

getUser() => this.userInfo ? of(this.userInfo) : this.http.get<UserInfo>().pipe(tap(userInfo => this.userInfo = userInfo))
,

尝试在ngAfterViewInit生命周期挂钩中订阅主题,而不是ngOnInit

本文链接:https://www.f2er.com/3161321.html

大家都在问