Rxjs结合2个观测,角2
问题描述:
我有2个观测,这两个HTTP调用:Rxjs结合2个观测,角2
itemList$:Observable<any[]>;
newItem$:Observable<any[]>;
ngOnInit(){
itemList$ = this.http.getList(...some url...) // returns array of many items
}
createNewItem(){
newItem$ = this.http.createNewItem(...some url...) //returns array of one item
}
我想称之为“createNewItem()”函数从其他地方,我想结果被合并用当前的itemList $ observable结果来形成一个项目数组。
在HTML我有一个异步管这就是听itemList中$:
<div *ngFor="let item of itemList$ | async">{{item.name}}</div>
我怎么能合并的newitem $到itemList中$,并有异步管显示合并的结果吗?
答
您可以使用Observable.merge
(我有RxJS版本5.0.1)
Observable.merge(newItem$, itemList$)
.subscribe(response => {
// Perform your action
});
https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/merge.md
答
您可以使用Subject
而不是Observable
s。只要你创建一个新的项目,交给主题并发布它。
itemList$:AsyncSubjct<any>;
createNewItem(){
this.http.createNewItem(...some url...).subscribe(data => {
this.itemList$.next(data);
}
如果我使用.subscribe操作符,那么我不能使用异步管道(它自动处理退订)。 – Nik
然后不要使用异步管道,而是在OnDestroy中手动取消订阅,或者使用带便利注释的TakeUntilDestroy-plugin来自动取消订阅所有内容。 – Phil