我是Angular的初学者。我正在观看Mosh Hamedani的教程,该教程的版本为4,但是我使用的是更高版本。我正在AddToCart按钮上的电子商务项目中,该产品应通过单击按钮来增加其数量,并使用productId在Firebase中更新,并且如果我尝试添加新产品,则该新产品的ID应该添加到AngularFire数据库中
现在一切正常,在shopping-cart.service.ts文件中出现错误。尝试将产品添加到购物车时,我在控制台中收到此错误。错误错误:未捕获(承诺):TypeError:无法读取未定义的属性“ key”。 我的错误是在product.key中 这是代码。
product.ts
setview
shopping-cart.service.ts
import { Injectable } from '@angular/core';
import { AngularFireDatabase } from '@angular/fire/database';
import { map } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class ProductService {
constructor(private db : AngularFireDatabase) { }
create(product){
return this.db.list('/products').push(product);
}
getAll(){
return this.db.list('/products').snapshotChanges().pipe(
map((products:any[])=>products.map(prod=>{
const payload = prod.payload.val();
const key = prod.key;
return <any>{key,...payload};
}))
)
}
get(productId){
return this.db.object('/products'+productId).valueChanges();
}
delete(productId){
return this.db.object('/products'+productId).remove();
}
}
product.ts
async addToCart(product:Product){
let cartId = await this.getOrCreateCartId();
let item$:Observable<any> = this.db.object('/shopping-cart/' + cartId + '/items/' + product.key).valueChanges();
let item$$ = this.db.object('/shopping-carts/' + cartId + '/items/' + product.key);
item$.pipe(take(1)).subscribe(item=>{
if(item===null){
item$$.set({product:product,quantity:1});
console.log("Adding new product to cart");
}else{
item$$.update({quantity:item.quantity+1});
console.log("Updating the quantity")
}
});
}
答案 0 :(得分:0)
您的item $很可能在您执行item $ .pipe(take(1))时未初始化