[英]Sharing an observable between components / multicast an observable in Angular2
学习可观察和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')
,这是一个简写。
.multicast(new BehaviorSubject('default'))
既然您已经使用.refCount()
进行多播, .refCount()
您应该没问题,但很难从我们在这里看到的内容中提供任何建议。
如果您可以或不能在您的情况下使用BehaviorSubject
取决于您想要做什么。 BehaviorSubject
将一个默认值作为参数,该默认值在订阅时立即发送给其订阅者。 ReplaySubject
重复先前发出的源Observable中的一系列项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.