gpt4 book ai didi

angular - 在组件之间共享一个 observable/在 Angular2 中多播一个 observable

转载 作者:太空狗 更新时间:2023-10-29 17:50:19 25 4
gpt4 key购买 nike

学习 observable 和 Angular2。我想找出在多个 Angular2 组件之间共享可观察对象的最佳实践。作为可观察的默认值不是多播。因此,我应用程序不同部分的每个订阅都会打开一个新流(再次调用我的 API 服务器!)。此外,我需要共享该值并获取该可观察值的最新值。我听到人们使用行为主题。但这真的很令人困惑,我找不到一个很好的例子。这是我在我的 authService 中处理这个问题的方法:

    userInfo$: Observable<User>;

this.userInfo$ = this.authInfo$
.switchMap(authInfo => this.findUserByuid(authInfo.$uid)) // finding user info base on authInfo turn or not.
.publishReplay(1).refCount();

在我的 Angular2 组件中,我这样做:

 this.authService.userInfo$.subscribe(user => {
console.log (user);
this.user = user;
})

一切正常。但是我想知道在这种情况下我可以使用行为主题吗?我是否通过在我的所有组件之间共享 userInfo$ 来做所有正确的事情(我所有需要 userinfo$ 的组件都会执行上述代码来订阅它)?

最佳答案

Operator .publishReplay(1) 只是以下内容的简写:

.multicast(new ReplaySubject(1))

如果你想使用 BehaviorSubject,你可以使用 .publishBehavior('default'),它是 for.

.multicast(new BehaviorSubject('default'))

由于您已经通过 .refCount() 使用多播,您应该没问题,但很难根据我们在此处看到的内容提供任何建议。

在你的情况下你是否可以使用 BehaviorSubject 取决于你想做什么。 BehaviorSubject 将默认值作为参数,在订阅者订阅时立即将其发送给订阅者。 ReplaySubject 重复之前发出的源 Observable 中的一系列项目。

关于angular - 在组件之间共享一个 observable/在 Angular2 中多播一个 observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41771999/

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