【发布时间】:2018-12-17 06:59:58
【问题描述】:
我想获取并显示客户添加的购物车页面中商品的总价。
目标:客户应该能够观察到订单总价的变化。问题是客户可以增加或减少数量。
我有一个从会话存储中获取的“OrderLine”对象数组。他们每个人都有数量和价格WhenBought。
@SessionStorage({key: 'cart'}) orderLineMealsInCart: Array<OrderLine> = [];
这里是 OrderLine 类:
export class OrderLine {
mealId?: number;
meal?: Meal;
orderId?: number;
quantity: number;
priceWhenBought: number;
}
在 html 文件中输入实时控制项目的数量,并且有一个绑定到此输入的方法,在您写入不同的数字后,该方法将更改“旧”数量的项目以更改数量的项目.
<div *ngFor="let orderLineMeal of orderLineMealsInCart">
<div class="cartMealsSection">
<div *ngFor="let meal of mealsForImage">
<div *ngIf="meal.id === orderLineMeal.mealId">
<img src="{{meal.picture}}" alt="" class="cartMeal-picture">
</div>
</div>
<div>{{orderLineMeal.mealId}}</div>
<div>{{orderLineMeal.priceWhenBought}}</div>
<div>{{orderLineMeal.quantity}}</div>
<div>{{orderLineMeal.quantity * orderLineMeal.priceWhenBought}}</div>
</div>
<div>
<div>
<button (click)="deleteOrderLineMealFromCart(orderLineMeal)">Delete</button>
</div>
<div>
<mat-form-field>
<input type="number" matInput [(ngModel)]="orderLineMeal.quantity" (ngModelChange)="changeOrderLineMeal(orderLineMeal)">
</mat-form-field>
</div>
</div>
然后是改变数量的方法:
changeOrderLineMeal(orderLineMeal: OrderLine) {
const index = this.orderLineMealsInCart.indexOf(orderLineMeal);
this.orderLineMealsInCart[index] = orderLineMeal;
(<any>this.orderLineMealsInCart).save(); // <- saving to the session storage
}
我知道要实时更改订单的总价格,我需要 Observable (rxjs),但在这种情况下,我不知道如何实现这一点。
我还会在这里放置 Order 类,您可以在其中找到订单的 totalPrice,这是我需要实现的最后一件事。
export class Order {
id?: number;
mobilenumber: string;
customerName: string;
pickUpDateAndTime?: Date;
orderedDateAndTime?: Date;
comment: string;
orderLines?: OrderLine[];
totalPrice: number;
}
如果能提供任何帮助,我将不胜感激。
【问题讨论】:
标签: angular typescript rxjs