javascript - 无法使用 Angular5 更新 Firebase 中的项目
问题描述
我正在使用 angular 版本:5.2.0, angularfire2: 5.0.0-rc.7和 firebase 版本:4.13.1。我有一个将产品添加到购物车的场景。如果购物车中已经存在相同的物品,则数量将增加一个。就我而言,它每次都添加新项目,而不是更新现有项目。
下面是我的服务类。我试图在addToCart方法中打印项目,但它以null的形式出现。即使经过多次搜索,我也无法找到解决方案。请指导或纠正我。
import { Observable } from 'rxjs/Observable';
import { Product } from './models/product';
import { Injectable } from '@angular/core';
import 'rxjs/add/operator/take';
import { AngularFireDatabase, AngularFireObject } from 'angularfire2/database';
@Injectable()
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);
}
private 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();
console.log(product.key);
const itemRef = this.getItem(cartId, product.key);
const item$: Observable<any> = itemRef.snapshotChanges();
item$.take(1).subscribe(item => {
console.log(item.key);
itemRef.update({
product: product,
quantity: (item.quantity || 0) + 1
});
});
}
}
解决方案
推荐阅读
- android - 导航库双导航UI组件
- sorting - base64 编码是否保留字母顺序?
- image - 将多个 .jpg 图像文件转换为单个 docx 文件
- jenkins - JENKINS SVN 连接:E175002:等待服务器超时
- strapi - Strapi + knex 执行复杂的查询
- bash - 在mac上使用sed删除文件中第一次出现的字符串
- c# - UWP 中一个 CS 文件的不同 XAML 布局结构
- javascript - 如何从每个请求 100 个结果中提高 Google NewsApi 限制?我怎样才能得到更多的结果?
- python - 将 long int 转换为 float 时 Numpy 失去精度
- python - Python没有运行我的程序没有任何错误