我有一个AuthService
,从Firebase获取Observable<auth>
数据,并把它放在一个公共变量auth$
。
在我的应用程序的某个地方,我需要多个组件访问这个auth$
值来检查它的内容。
我目前正在做this.authService.auth$.subscribe(auth => this.auth = auth)
组件。
-
这是否意味着我正在执行
fetch data from Firebase
多次? -
如果是,我是否应该将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)