学习可观察和Angular2。我想找出在多个Angular2组件之间共享可观察对象的最佳实践。可以观察到的默认值是不组播。因此,应用程序不同部分的每个订阅都将打开一个新流(再次调用我的API服务器!)。另外,我需要共享该值并获取该可观察值的最新值。我听到有人使用行为主题。但这确实令人困惑,我无法找到一个很好的例子。这是我在authService中处理此问题的方法:
userInfo$: Observable; 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)
只是以下各项的简写:
.multicast(new ReplaySubject(1))
如果您想使用BehaviorSubject
,可以使用.publishBehavior('default')
简写形式。
.multicast(new BehaviorSubject('default'))
由于您已经在使用多播了,所以.refCount()
应该很好,但是很难从我们这里看到的内容中给出任何建议。
是否可以使用BehaviorSubject
取决于您要执行的操作。BehaviorSubject
将默认值作为参数作为参数,该默认值将在订阅者订阅时立即发送给订阅者。ReplaySubject
从源Observable重复一系列先前发出的项目。