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。你查过我之前的评论了吗?