Javascript 在angular js中使用push函数

Javascript 在angular js中使用push函数,javascript,angularjs,push,angularjs-ng-repeat,Javascript,Angularjs,Push,Angularjs Ng Repeat,我正在尝试做一个电子商务商店与角度和代码如下 var shopApp = angular.module('shopApp', ["slugifier"], function() {}); controllers.productController = function($scope,FetchFactory) { $scope.fetchProducts = function(offset) { FetchFactory.items.fetchItems(of

我正在尝试做一个电子商务商店与角度和代码如下

var shopApp = angular.module('shopApp', ["slugifier"], function() {});

   controllers.productController = function($scope,FetchFactory) {

     $scope.fetchProducts = function(offset) {
        FetchFactory.items.fetchItems(offset).then(function(data){
        $scope.products = data;
    });
  }
  var activeAttrValue = 0;
  var activeAttrUnit = 0;
  var activeAttrId = 0;
   $scope.add_to_cart() = function(index){
        var newProd = [];
        newProd = $scope.products[index]; // $scope.products have products json
        newProd.quantity = 1;
        newProd.attr_id = activeAttrId;
        newProd.attr_value = activeAttrValue;
        newProd.attr_unit = activeAttrUnit;
        $scope.cartProducts.itemlist.push(newProd);
        $scope.cartProducts.total_items++;
        $scope.cartProducts.total_price += parseInt(newProd.price);
   }
 }
 shopApp.controller(controllers);
我创建了一个工厂,在ajax请求后将返回我的产品json,并在产品中使用ng repeat作为产品。我在html中显示所有产品,我创建了一个购物车,其中添加到购物车中的产品通过cartProducts.itemlist中cartProduct的ng repeat显示 产品具有颜色、大小、重量等属性。每当单击属性时,其值(如重量和单位千克)将存储在全局变量activeAttrValue、activeAttrUnit中,如果单击“添加到购物车”,则将其存储在cartProducts中

问题: 如果有多个属性。当选择一个属性添加到购物车时,再次选择同一产品的另一个属性并添加到购物车。理想情况下,他们应该将两个产品添加到购物车中,但最后添加的产品和属性只会添加,并且在控制台中给出一个错误

 Error: [ngRepeat:dupes] http://errors.angularjs.org/1.2.16/ngRepeat/dupes?p0=cartProduct%20in%20cartProducts.itemlist&p1=object%3A006
当我尝试console.log$scope.cartProducts.itemlist时; 我知道了

 Object
   $$hashKey: "005"
   attr_id: "3"
   attr_unit: ""
   attr_value: "blue"
  , 
  Object
   $$hashKey: "005"
   attr_id: "3"
   attr_unit: ""
   attr_value: "blue"
两种产品的属性都更改为相同


我希望我清楚我的问题。

在cartProducts.itemlist中尝试ng repeat=cartProduct按$index跟踪。

在cartProducts.itemlist中尝试ng repeat=cartProduct按$index跟踪。

默认情况下,Angular不允许在ng repeat上重复元素。 为了解决这个问题,您需要在ng repeat指令中添加一个曲目by

例如,对于包含重复元素的数字列表:

<div ng-repeat="value in [1, 1, 1, 2, 2] track by $index"></div>

有关更多信息,请检查“角度”是否默认不允许重复ng repeat上的重复元素。 为了解决这个问题,您需要在ng repeat指令中添加一个曲目by

例如,对于包含重复元素的数字列表:

<div ng-repeat="value in [1, 1, 1, 2, 2] track by $index"></div>

有关更多信息,请查看

已尝试过!!当我尝试console.log$scope.cartProducts.itemlist时,它显示为两个产品,但这两个产品的属性成为最后选择的属性。我已经尝试过了!!当我尝试console.log$scope.cartProducts.itemlist时,它显示为两个产品,但这两个产品的属性将成为最后一个选择的属性。我确信可能存在重复的以及更多。。您应该尝试搜索,错误为ngRepeat:dupes是否尝试将同一项推送到数组中?如果您使用newProd=angular.clone$scope.products[index];在之前发布的答案中,有关于您为什么会看到此问题的信息。angular.clone应删除$$hashKey。不管怎么说,如果同一件物品被推到购物车里,你为什么不为它关联一个计数器呢,不是推同一个对象。是的,相同的项目,但具有不同的选定属性。当我尝试像这样添加时,效果很好1.product-A具有属性-1.product-B不具有任何属性3.product-A具有属性-2有点像我选择了一个蓝色T恤并添加到购物车。。它也有黑色的。。所以我选择黑色并添加到购物车。但我发现添加了两个黑色T形三通,这是因为您使用的是相同的对象引用。使用angular.clone。你有没有查过我之前的评论?我相信可能是重复的,还有更多。。您应该尝试搜索,错误为ngRepeat:dupes是否尝试将同一项推送到数组中?如果您使用newProd=angular.clone$scope.products[index];在之前发布的答案中,有关于您为什么会看到此问题的信息。angular.clone应删除$$hashKey。不管怎么说,如果同一件物品被推到购物车里,你为什么不为它关联一个计数器呢,不是推同一个对象。是的,相同的项目,但具有不同的选定属性。当我尝试像这样添加时,效果很好1.product-A具有属性-1.product-B不具有任何属性3.product-A具有属性-2有点像我选择了一个蓝色T恤并添加到购物车。。它也有黑色的。。所以我选择黑色并添加到购物车。但我发现添加了两个黑色T形三通,这是因为您使用的是相同的对象引用。使用angular.clone。你查过我之前的评论了吗?