在组件之间共享一个可观察对象/在 Angular2 中多播一个可观察对象
Sharing an observable between components / multicast an observable in Angular2
学习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$ 的组件都会执行上述代码来订阅它)?
运算符 .publishReplay(1)
只是一个 shorthand 用于:
.multicast(new ReplaySubject(1))
如果你想使用 BehaviorSubject
你可以使用 .publishBehavior('default')
这是一个 shorthand for.
.multicast(new BehaviorSubject('default'))
由于您已经在 .refCount()
中使用多播,您应该没问题,但很难根据我们在此处看到的内容提供任何建议。
在你的情况下你是否可以使用 BehaviorSubject
取决于你想做什么。 BehaviorSubject
将默认值作为参数,在订阅者订阅时立即将其发送给订阅者。 ReplaySubject
重复之前发出的源 Observable 中的一系列项目。
学习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$ 的组件都会执行上述代码来订阅它)?
运算符 .publishReplay(1)
只是一个 shorthand 用于:
.multicast(new ReplaySubject(1))
如果你想使用 BehaviorSubject
你可以使用 .publishBehavior('default')
这是一个 shorthand for.
.multicast(new BehaviorSubject('default'))
由于您已经在 .refCount()
中使用多播,您应该没问题,但很难根据我们在此处看到的内容提供任何建议。
在你的情况下你是否可以使用 BehaviorSubject
取决于你想做什么。 BehaviorSubject
将默认值作为参数,在订阅者订阅时立即将其发送给订阅者。 ReplaySubject
重复之前发出的源 Observable 中的一系列项目。