angular - Angular 5:购物车
问题描述
我想在我的应用程序服务中实现购物车。我在新购物车中创建商品时遇到问题。当我想为从我的服务中获取的产品分配一个新的创建购物车时,我遇到了一个错误:
“Observable”类型缺少“Products”类型的以下属性:Id、Name、Description、DetailedDescription 和另外 5 个。
在该行Product: this.productService.getProductById(id),
和第二个错误:
类型“可观察”不可分配给类型“数字”
在行中:TotalPrice: this.productService.getProductById(id).map(data => data.Price)
CartItem 类:
export class CartItem {
product: Products;
quantity: number;
totalPrice: number;
}
服务:
getProductById(id) {
return this.http.get<Products>('http://localhost:61085/api/Products/GetProductsById/' + id);}
购物车组件:
export class CartComponent implements OnInit {
private items: CartItem[] = [];
constructor(private activeRoute: ActivatedRoute , private productService: CategoriesProductsService) { }
ngOnInit() {
this.addProductToCart();
}
addProductToCart() {
this.activeRoute.params.subscribe( params => {
let id = +params['id'];
if (id) {
let item: CartItem = {
Product: this.productService.getProductById(id), // <-- error
Quantity: 1,
TotalPrice: this.productService.getProductById(id).map(data => data.Price) // <-- error
};
// if the cart is empty, set localstorage
if (localStorage.getItem('userCart') === null) {
let cart = [];
cart.push(JSON.stringify(item));
localStorage.setItem('userCart', JSON.stringify(cart));
} else {
// if the cart exist
let cart: any = JSON.parse(localStorage.getItem('userCart'));
let index = -1;
for (let i = 0; i < cart.length; i++) {
let item: CartItem = JSON.parse(cart[i]);
if (item.Product.Id === id) {
index = i;
break;
}
}
if (index === -1) {
cart.push(JSON.stringify(item));
localStorage.setItem('userCart', JSON.stringify(cart));
} else {
let item: CartItem = JSON.parse(cart[index]);
item.Quantity++;
cart[index] = JSON.stringify(item);
localStorage.setItem('userCart', JSON.stringify(cart));
}
}
}
});
}
loadCart() {
this.items = [];
let cart = JSON.parse(localStorage.getItem('userCart'));
for (let i = 0; i < cart.length; i++) {
let item = JSON.parse(cart[i]);
this.items.push({
Product: item.Product,
Quantity: item.Quantity,
TotalPrice: item.Product.Price
});
}
}
}
HTML:
<h2> Cart info</h2>
<div class="row">
<div class="col-sm-4" *ngFor="let product of items">
<p>{{product.Product.Name}}</p>
<p>{{product.Quantity}}</p>
<p>Total price: {{product.TotalPrice * product.Product.Price}}</p>
</div>
</div>
欢迎任何帮助或建议
解决方案
我不明白你面临什么问题,我给出了一般的解决方案。
首先在你的 service.ts 中导入 Observable
import { Observable } from 'rxjs';
之后将观察者添加到您的函数中。
getProductById(id):Observable<Product> {
return this.http.get('http://localhost:61085/api/Products/GetProductsById/' + id);}
推荐阅读
- c# - 替代快速截取窗口的屏幕截图
- java - 如何在杰克逊映射器的帮助下使用单个 JSON 文件创建多种类型的 java 对象?
- javascript - JavaScript - 将抽认卡创建为 PDF
- ios - 在具有多个表视图的视图控制器中删除 UITableView 行(Swift)
- java - 在 Java Swing 中刷新现有窗口
- ios - Swift - 如何从值中获取字典元素的索引?
- cucumber - Codeception 与德语中的 Gherkin 关键字
- android - 来自活动的刷新片段
- android - Android Studio 找不到 JVM
- vba - For循环从1到递增值