我正在尝试汇总所有小计并返回总计,但是我得到了狂野的值,并且我经常遇到错误:表达式在检查后已更改。
当我使用
import { ChangeDetectionStrategy } from '@angular/core';
@Component({
changeDetection: ChangeDetectionStrategy.OnPush
})
它抑制了表达式已更改的错误,但我仍然获得总计的野生值。
这是在我的组件中:
totals : number[ ] = [ ];
get grandTotal() {
let i;
let sub_total = 0;
let grand_total = 0;
if (this.isSubmitted == true){
sub_total = this.product_price * this.quantity;
if (typeof this.product_price === "undefined") {
return 0;
} else {
this.totals.push(sub_total);
for (i = 0; i < this.totals.length; i++) {
grand_total += this.totals[i];
this.isSubmitted = false;
}
return grand_total;
}
}
}
这是在我的HTML中;
<div>Grand Total {{ grandTotal }}</div>
答案 0 :(得分:0)
几周前,我完成了一个项目,您想实现的目标是什么。 我将尝试解释它在此站点上的工作原理,将产品添加到列表中的操作,并计算整个订单的总和。
如果订单是新订单,则会创建一个新的订单文档,并向该文档中添加产品的新集合,客户将选择其他产品并将其添加到同一订单中
由于在将产品添加到列表时将其保存在Firebase文档中,因此它还会添加一些其他参数。这样。
,并且如第一个图像一样收集此数据以进行检出。 我得到了这个产品清单。在OrderService中
getProdListInOrder(user, orderid) {
return this.db.collection('users').doc(user).collection('ordersout')
.doc(orderid).collection('products').snapshotChanges().pipe(
map(action => action.map(as => {
const id = as.payload.doc.id;
const data = as.payload.doc.data() as OrderProdData;
return { id, ...data };
}))
);
}
在使用此方法的checkOut组件中,我向客户显示有关订单的所有信息; 在这种方法中
getProdInOrder() {
this.osrv.getProdListFromOrder(this.USERID, this.PEDIID).subscribe(prolist => {
this.listaPR = prolist;
this.LISTAPROD.emit(prolist);
this.listaprice = [];
//extract only totalprice to the list
this.listaPR.forEach(tp => {
this.listaprice.push(tp.totalprice);
});
this.TotalTicket = this.listaprice.reduce((ac, cur) => ac + cur, 0);
this.TOTALPRICE.emit(this.TotalTicket);
});
}
在这种方法中,我仅提取总价并添加到“标价”中,并具有减少所有订单总和的功能。 您也可以计算价格总和,而无需提取总价。
this.TotalTicket = this.listaPR.map(t => t.totalprice).reduce((ac, cur) => ac + cur, 0);
如果您还有其他问题,请随时提出。
答案 1 :(得分:0)
我能够通过在onSubmit函数中将isSubmitted设置为true,并在获取方法的结尾将其设置为false来解决此问题。我已经编辑了帖子以显示此内容。