Angular Значение идентификатора базы данных Firebase отображается как неопределенное - PullRequest
0 голосов
/ 24 апреля 2020

В идентификаторе корзины базы данных Firebase отображается неопределенное (проверьте изображение), и только один элемент категории добавляется в базу данных Firebase, а при добавлении другого продукта не отображается в базе данных, но количество увеличивается.

Это услуга корзины покупок. .

, пожалуйста, помогите мне.

enter image description here

import { Injectable } from '@angular/core';
import { AngularFireDatabase } from 'angularfire2/database';
import { Product } from './models/product';
//import 'rxjs/add/operator/take';
import { take } from 'rxjs/operators';
import 'rxjs/add/operator/take';

@Injectable({
  providedIn: 'root'
})
export class ShoppingCardService {


  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<any>('/shopping-carts/' + cartId + '/items/' + productId);
  }


  private async getOrCreateCartId() {
    let cartId = localStorage.getItem('cartId');
    if (cartId) return cartId;

    let result = await this.create();
    localStorage.setItem('cartId', result.key);
    return result.key;
  }


  async addToCart(product: Product) {
    let cartId = await this.getOrCreateCartId();
    let item$ = this.getItem(cartId, product.$key);

    item$.snapshotChanges().pipe(take(1)).subscribe((item: any) => {
      if (item.key != null) {
        item$.update({ quantity: (item.payload.val().quantity || 0) + 1 });
      }
      else {
        item$.set({ product: product, quantity: 1 });
      }
    });
  }
}

Это product-card-component.ts ... В product-card-component.ts использовал метод addToCart ().

import { Component, OnInit, Input } from '@angular/core';
import { Product } from '../models/product';
import { ShoppingCardService } from '../shopping-card.service';

@Component({
  selector: 'app-product-card',
  templateUrl: './product-card.component.html',
  styleUrls: ['./product-card.component.css']
})
export class ProductCardComponent  {
  @Input('product') product: Product;
  @Input('show-actions') showActions = true;
  constructor(private cartService: ShoppingCardService) { }



  addToCart(product: Product) {
    this.cartService.addToCart(product);


  }

}

модель / product.ts

export interface Product {
  $key: string;
  title: string;
  price: number;
  category: string;
  imageUrl: string;
}
...