在组件之间共享Auth Observable值,而不需要多次执行它



我有一个AuthService,从Firebase获取Observable<auth>数据,并把它放在一个公共变量auth$

在我的应用程序的某个地方,我需要多个组件访问这个auth$值来检查它的内容。

我目前正在做this.authService.auth$.subscribe(auth => this.auth = auth)组件。

  1. 这是否意味着我正在执行fetch data from Firebase多次?

  2. 如果是,我是否应该将auth$定义为Subject/BehaviorSubject,订阅服务并使用.next推送数据?

默认情况下,可观察对象不启用组播。这意味着多个订阅将生成它们自己的流。由于您不希望为每个订阅重新获取身份验证凭据,因此需要使原始流多播兼容。这是使用share()操作符完成的,它将在第一次订阅时使流热,并在内部存储所有后续订阅的refcount。

由于延迟的订阅不会在流变热时自动获得先前发出的值,因此我们需要构建重放发出值的功能。

这两个要求都结合在shareReplay()操作符中,它允许您的多播最新的n值。

所以你的代码应该是这样的:
const authStream = this.authService.auth$.shareReplay(1);
// component 1
const myAuthDisposable = authStream.subscribe(auth => this.auth = auth)
// component 2
const myAuthDisposable = authStream.subscribe(auth => this.auth = auth)

相关内容

最新更新