我试图通过将产品的数量乘以它的价值来获得产品的总价格。 当我从列表中选择产品时,它有一个初始值和一个初始数量,然后我订阅两者的值更改以进行如下计算:
let initialQuantity = this.items.at(lastIndex).get("quantity").value;
let initialValue = this.items.at(lastIndex).get("productValue").value;
this.quantity$ = this.items.at(lastIndex).get("quantity").valueChanges;
this.productValue$ = (this.items.at(lastIndex).get("productValue").valueChanges;
combineLatest(this.quantity$, this.productValue$)
.pipe(
startWith([initialQuantity, initialValue]),
takeUntil(this._destroy)
)
.subscribe(([quantity, productValue]) => {
let totalPrice = quantity * productValue;
this.items.at(lastIndex).get("totalPrice").setValue(totalPrice);
});
});
问题是我必须更改这两个值才能combineLatest
开始发射,即使我已经用startWith
设置了初始值并且第一个结果显示正确。因此,如果我只更改数量或仅更改产品值,则不会发生任何情况。我做错了什么?
我认为你可以这样做:
combineLatest(
this.quantity$.pipe(startWith(initialQuantity)),
this.productValue$.pipe(startWith(initialValue))
)
.pipe(
map(([quantity, value]) => quantity * value)
takeUntil(this._destroy)
).subscribe(/* ... */)
我还建议不要用太多的逻辑"膨胀"你的订阅回调,当可以使用运算符完成时(例如:上面的map
(