繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM