В идентификаторе корзины базы данных Firebase отображается неопределенное (проверьте изображение), и только один элемент категории добавляется в базу данных Firebase, а при добавлении другого продукта не отображается в базе данных, но количество увеличивается.
Это услуга корзины покупок. .
, пожалуйста, помогите мне.
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;
}