我在同一页面上有两个组件。第一个显示项目列表,第二个显示项目的精简程序。我想在服务中使用Observables
以便在两个组件之间建立“通信”。
所以,在我看来,它会是这样的:
Observable
上发出一些内容,因此,第一个组件会收到一个新的项目列表并更新其视图。看起来很简单,但我无法围绕不同的课程(Subscription
,Subscriber
,Subject
和Observable
)。我最接近的是使用Subject
,但我不知道如果有新订阅者,如何发送项目的初始列表。
答案 0 :(得分:1)
你走在正确的轨道上。如果您希望每个订阅者获得先前发出的值,请使用ReplaySubject。这将重播每个新订户的整个列表(或您选择的任何缓冲区长度)。
如果ReplaySubject具有固定的起始值,请使用BehaviorSubject。
您希望将这两者中的一个用作服务中的私有财产。使用新列表调用服务时,请在主题上调用.next
。为Subject添加一个公共getter方法,将其转换为Observable(使用.asObservable()
方法)。这用于订阅者获取值。 (您不希望将主题本身公开以防止其他人更改它。)
主题同时是一个Observable和一个Observer,这意味着您不仅可以从它获取值(通过Observable接口),还可以自己添加这些值(通过Observer接口)。