gpt4 book ai didi

angular - 在组件之间共享 Auth Observable 值,无需多次执行

转载 作者:行者123 更新时间:2023-12-02 20:55:10 24 4
gpt4 key购买 nike

我有一个AuthService获取 Observable<auth>来自 Firebase 的数据并将其放入公共(public)变量 auth$ .

在我的应用程序中的某个位置,我需要多个组件来访问此 auth$值来检查其内容。

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

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

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

最佳答案

默认情况下,可观察对象未启用多播。这意味着多个订阅将生成自己的流。由于您不想为每个订阅重新获取身份验证凭据,因此您需要使原始流与多播兼容。这是使用例如 share() 运算符来完成的,该运算符将使流在第一个订阅时变得热门,并在内部存储所有后续订阅的引用计数。

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

这两个要求都合并在 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)

关于angular - 在组件之间共享 Auth Observable 值,无需多次执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40650859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com