Angular 4功能仅适用于第二次

时间:2017-11-12 20:02:11

标签: javascript arrays angular typescript shopping-cart

我正在Angular 4中创建购物车,并想检查 cartProducts数组中是否存在新产品 prod 。 这是我的组件:

组件

import { Component, OnInit } from '@angular/core';
import { Router } from "@angular/router";
import { ProductsService } from '../service/products.service';

@Component({
  selector: 'app-store',
  templateUrl: './store.component.html',
  styleUrls: ['./store.component.css']
})
export class StoreComponent implements OnInit {

  itemCount: number;
  cartProducts: any = [];
  productsList = [];

  constructor( private _products: ProductsService ) { }

  ngOnInit() {
    this.itemCount = this.cartProducts.length;
    this._products.product.subscribe(res => this.cartProducts = res);
    this._products.updateProducts(this.cartProducts);
    this._products.getProducts().subscribe(data => this.productsList = data);
  }

  addToCart(prod){
    this.cartProducts.hasOwnProperty(prod.id) ? console.log("Added yet!") : this.cartProducts.push(prod);
    console.log(this.cartProducts)
  }

}

点击时触发的 addToCart 功能正常,但仅限第二次。

单击1次 - 我们在空 cartProducts 数组中添加产品,添加产品

2点击 - 虽然添加了产品,但它会再次添加,现在阵列中有两个相同的产品。我有两个相同产品的阵列。

3点击 - 控制台显示"已添加!",现在它识别出产品已在阵列中。

UPD 该产品是类型的对象:

{
  "id" : "1",
  "title" : "Title 1",
  "color" : "white"
}

如何解决问题?

2 个答案:

答案 0 :(得分:2)

hasOwnProperty用于检查对象中是否存在某个键,您将其用于数组。请改用:

 addToCart(prod){
    this.cartProducts.indexOf(prod) > -1 ? console.log("Added yet!") : this.cartProducts.push(prod);
    console.log(this.cartProducts)
  }

答案 1 :(得分:1)

试试这个:

    let idx = this.cartProducts.findIndex(elem => {
          return prod === elem
     })

     if (idx !== -1) {
          console.log("Added yet!")
     } else {
       this.cartProducts.push(prod);
      }