在Angular2中共享组件之间的可观察对象/多播可观察对象

时间:2017-01-20 20:38:53

标签: angular rxjs observable rxjs5

学习可观察和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 $的所有组件都会执行以上代码来订阅它)?

1 个答案:

答案 0 :(得分:4)

运营商.publishReplay(1)只是简写:

.multicast(new ReplaySubject(1))

如果您想使用BehaviorSubject,可以使用.publishBehavior('default')作为简写。

.multicast(new BehaviorSubject('default'))

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

如果你能够或不能在你的案件中使用BehaviorSubject取决于你想做什么。 BehaviorSubject将参数作为参数作为默认值,在订阅时立即向其订阅者发送。 ReplaySubject重复从之前发出的源Observable中的一系列项目。