这似乎应该是一种相当普遍的模式,所以我希望有人可以提供帮助。
我正在尝试通过Angular服务公开可观察的“事物”。我的服务需要首先获取事物列表,然后侦听添加的新事物。因此,我要提出两个不同的服务请求,但是我试图将它们都包装在一个可观察的事物中,以便使用组件不必担心内部问题。
所以,它看起来像这样:
export class MyService {
constructor(private commService: CommService){}
get things(): Observable<Things[]> {
// how can I get the initial list of things, then listen for updates?
//THIS DOESN'T WORK
return merge(commService.getAllInitialThings(), commService.listenToThingAdded());
}
}
export class CommService{
getAllInitialThings(): Observable<Things[]> { //etc }
listenToThingAdded(): Observable<Thing> { //etc }
}
我已经尝试过使用concat和merge,但是我不知道如何
请注意,listenToThingAdded可能永远不会发生,但是我仍然需要返回事物的初始列表。
答案 0 :(得分:0)
您可以使用的是BehaviorSubject
,而不需要合并或合并之类的东西:
private things$: BehaviorSubject<Things[]>
getThings(): Observable<Things[]> {
if (!this.things$) {
const things = this.getThingsFormRequest(..);
this.things$ = new BehaviorSubject(things);
}
return this.things$;
}
addThing(thing: Things): void {
const updatedThings= this.things$.value;
updatedThings.push(thing);
this.things$.next(updatedThings)
}
使用这种方法,一旦将新值添加到数组中,Observalbe
返回的形式getThings
就会被更新(注意:代码是手工编写的,因此我不能保证语法)