首页 > 解决方案 > 无法使用 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
      });
    });
  }
}

标签: javascriptfirebase-realtime-databasefirebase-authenticationangularfire2

解决方案


推荐阅读