我遗失了一些东西,无法弄清楚它是什么。我正在创建购物车服务,出于某种原因,当用户向购物车添加不同类型的其他产品时,购物车会被新产品覆盖而不会创建新产品ID来保存新产品。任何人都可以告诉我这里我做错了吗?
我的ShoppingCart服务
export class ShoppingCartService {
constructor(private db: AngularFireDatabase) { }
private create() {
return this.db.list('/shopping-carts').push({
dateCreated: new Date().getTime()
});
}
private getCart(cartId: string) {
return this.db.object('/shopping-carts/' + cartId);
}
getItem(cartId: string, productId: string) {
return this.db.object('/shopping-carts/' + cartId + '/items/' + productId);
}
private async getOrCreateCartId() {
const cartId = localStorage.getItem('cartId');
if (cartId) { return cartId; }
const result = await this.create();
localStorage.setItem('cartId', result.key);
return result.key;
}
async addToCart(product: Product) {
const cartId = await this.getOrCreateCartId();
const item$ = this.getItem(cartId, product.key);
item$.snapshotChanges().take(1).subscribe(item => {
if (item.payload.exists()) {
item$.update({ product: product, quantity: item.payload.val().quantity + 1});
} else {
item$.update({ product: {
title: product.title,
price: product.price,
category: product.category,
imageUrl: product.imageUrl,
}, quantity: 1} );
}
});
}
}
我的产品型号
export interface Product {
key: string;
title: string;
price: number;
category: string;
imageUrl: string;
}
答案 0 :(得分:0)
您可以创建一个新的ID'在保存数据之前:
const beforeId = this.db.createId();
并可以使用以下新ID创建参考:
const ref = this.db.collection('item').doc(beforeId );
现在您可以添加数据:
ref.set({
key: 'yourkey';
title: 'yourTitle';
...
})
.then(function (docRef) {
console.log('Save success!', docRef);
})
.then(response => {
console.error('response: ', response);
})
.catch(function (error) {
console.error('Error: ', error);
});