firebase中的产品ID无法创建

时间:2018-04-15 02:03:56

标签: angular firebase firebase-realtime-database

我遗失了一些东西,无法弄清楚它是什么。我正在创建购物车服务,出于某种原因,当用户向购物车添加不同类型的其他产品时,购物车会被新产品覆盖而不会创建新产品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;

}

这是来自firebase的截图 enter image description here

1 个答案:

答案 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);
        });