2017-01-20 26 views
3

学习observable和Angular2。我想找出在多个Angular2组件之间共享可观测数据的最佳实践。由于可观察的默认值不是多播。因此,我的应用的不同部分中的每个订阅都会打开一个新的流(再次调用我的API服务器!)。另外,我需要分享价值并获得该可观察值的最新价值。我听到人们使用行为主题。但是这真是令人困惑,我找不到一个很好的例子。下面是我如何处理这在我authService:在Angular2中共享组件/组播之间的可观察性

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 $的组件都将执行上述代码来订阅它)?如果你想使用BehaviorSubject你可以使用.publishBehavior('default')这是一个速记

.multicast(new ReplaySubject(1)) 

回答

4

操作.publishReplay(1)仅仅是一个速记。

.multicast(new BehaviorSubject('default')) 

由于您使用多播已经与.refCount()你应该罚款,但它很难给从我们可以在这里看到的任何建议。

如果您可以或不可以使用BehaviorSubject您的情况取决于您想要做什么。 BehaviorSubject将作为参数作为默认值,它们在订阅时立即发送给它的订阅者。 ReplaySubject重复之前发射的源Observable的一系列项目。