学习可观察和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 $的所有组件都会执行以上代码来订阅它)?
答案 0 :(得分:4)
运营商.publishReplay(1)
只是简写:
.multicast(new ReplaySubject(1))
如果您想使用BehaviorSubject
,可以使用.publishBehavior('default')
作为简写。
.multicast(new BehaviorSubject('default'))
由于您已经使用.refCount()
进行多播,因此您应该没问题,但很难从我们在此处看到的内容中提供任何建议。
如果你能够或不能在你的案件中使用BehaviorSubject
取决于你想做什么。 BehaviorSubject
将参数作为参数作为默认值,在订阅时立即向其订阅者发送。 ReplaySubject
重复从之前发出的源Observable中的一系列项目。