当前位置:  开发笔记 > 运维 > 正文

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

如何解决《在组件之间共享可观察对象/在Angular2中多播可观察对象》经验,为你挑选了1个好方法。

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



1> martin..:

运算符.publishReplay(1)只是以下各项的简写:

.multicast(new ReplaySubject(1))

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

.multicast(new BehaviorSubject('default'))

由于您已经在使用多播了,所以.refCount()应该很好,但是很难从我们这里看到的内容中给出任何建议。

是否可以使用BehaviorSubject取决于您要执行的操作。BehaviorSubject将默认值作为参数作为参数,该默认值将在订阅者订阅时立即发送给订阅者。ReplaySubject从源Observable重复一系列先前发出的项目。

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有