用rxjs和angular2创建我自己的observable

时间:2017-03-01 20:39:38

标签: angular rxjs

我在同一页面上有两个组件。第一个显示项目列表,第二个显示项目的精简程序。我想在服务中使用Observables以便在两个组件之间建立“通信”。

所以,在我看来,它会是这样的:

  • 第一个组件订阅了observable,同时检索未过滤的项目列表。
  • 当用户单击第二个组件中的精炼条件时,将调用服务函数以在Observable上发出一些内容,因此,第一个组件会收到一个新的项目列表并更新其视图。

看起来很简单,但我无法围绕不同的课程(SubscriptionSubscriberSubjectObservable)。我最接近的是使用Subject,但我不知道如果有新订阅者,如何发送项目的初始列表。

1 个答案:

答案 0 :(得分:1)

你走在正确的轨道上。如果您希望每个订阅者获得先前发出的值,请使用ReplaySubject。这将重播每个新订户的整个列表(或您选择的任何缓冲区长度)。

如果ReplaySubject具有固定的起始值,请使用BehaviorSubject

您希望将这两者中的一个用作服务中的私有财产。使用新列表调用服务时,请在主题上调用.next。为Subject添加一个公共getter方法,将其转换为Observable(使用.asObservable()方法)。这用于订阅者获取值。 (您不希望将主题本身公开以防止其他人更改它。)

主题同时是一个Observable和一个Observer,这意味着您不仅可以从它获取值(通过Observable接口),还可以自己添加这些值(通过Observer接口)。