Невозможно обновить элемент в Firebase, используя Angular5 - PullRequest
0 голосов
/ 19 мая 2018

Я использую угловую версию: 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
      });
    });
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...