我有一个带有两个不同函数的服务,它们获取一个由BehaviorSubject监视的数组中的itens数量。
private itemsInCartSubject: BehaviorSubject<any[]> = new BehaviorSubject([]);
private itemsInCart: any[] = [];
private packetsInCartSubject: BehaviorSubject<Pacote[]> = new BehaviorSubject([]);
private packetsInCart: Pacote[] = [];
public getTotalItens(): Observable<number> {
return this.itemsInCartSubject.map((items: any[]) => {
return items.reduce((prev, curr: any) => {
return prev + Number(curr.qtd);
}, 0);
});
};
public getTotalPacotes(): Observable<number> {
return this.packetsInCartSubject.map((items: any[]) => {
return items.reduce((prev, curr: any) => {
return prev + Number(1);
}, 0);
});
};
在我的组件中,我有两种方法来获取这些数字:
public countItens(): Observable<number> {
return this.cartService.getTotalItens();
}
public countPacotes(): Observable<number> {
return this.cartService.getTotalPacotes();
}
在我的html中,我可以显示如下值:
<p>You have {{countItens() | async}} in your cart</p>
它工作正常,当theres是对主题的更改时更新值,但我需要将两个Observable的两个值相加。
我该如何实现?
我试过
this.cartService.getTotalItens()+this.cartService.getTotalPacotes();
但它会生成错误:运算符'+'不能应用于Observable和Observable类型
答案 0 :(得分:3)
您可以使用combineLatest
组合这些Observable,然后返回一个新值,即两者的总和。您可以添加如下新功能:
public getTotal(): Observable<number> {
return this.countItens()
.combineLatest(this.countPacotes(), (itens, pacotes) => itens + pacotes);
}
然后在模板中你可以这样使用它:
<p>Total is: {{getTotal() | async}}</p>
Demo of combineLatest