[英]Is this an inconsistent behaviour of Angular or poor javascript skills?
我有一个具有数组属性的对象:
$scope.orderContent ={}
$scope.orderContent.products = []
然后我有一个函数,单击后会将对象推入数组:
if ($scope.orderContent.products.length) {
angular.forEach($scope.orderContent.products, function (iIndex, oValue) {
if (prod.id === iIndex.id) {
iIndex.qty ++;
} else if (prod.id !== iIndex.id) {
prod.subcategory = subcat.name;
prod.category = category.name;
prod.qty = 1;
$scope.orderContent.products.push(prod);
}
});
} else if (!$scope.orderContent.products.length || $scope.orderContent.products.length === 0) {
prod.subcategory = subcat.name;
prod.category = category.name;
prod.qty = 1;
$scope.orderContent.products.push(prod);
}
在模板上,我有三个嵌套的hg-repeat。 用于循环的对象大致如下所示: category = {}; category.subcategories = {}; category.subcategories.products = {}
category = {}; category.subcategories = {}; category.subcategories.products = {}
category = {}; category.subcategories = {}; category.subcategories.products = {}
因此我的模板循环遍历每个层(类别,子类别,产品)以显示每个产品。
我将上述功能附加到产品上,如下所示:
<button ng-click="addProduct(product, subcategory, category)">
我不明白的是:当我两次单击同一产品时,以上代码按预期工作。 不必两次推送相同的对象,而只需更改产品对象的quantity属性。 如果单击辅助产品,它将把另一个对象推入阵列。 到现在为止还挺好。 当第二次单击辅助产品时,会发生此问题。 有问题的产品对象的数量将增加,并且该对象将被推入数组。 到那时,我会收到一条错误消息:“不允许在转发器中重复”。
因此,我想知道由于双向绑定是否存在延迟(对Angular而言),或者我做了一些愚蠢的操作而看不到? 我一直在努力解决这个问题近两个星期,无法找到解决方案。
谁能启发我?
非常感谢
认为问题在于您的for循环逻辑-在else if
您基本上是push
每个其他产品的新条目push
入数组的末尾,即数组中的每个条目,其中prod.id !== iIndex.id
。 而是像这样将推送移出循环:
var found = false;
angular.forEach($scope.orderContent.products, function (iIndex, oValue) {
if (prod.id === iIndex.id) {
found = true;
iIndex.qty ++;
}
}
if(!found) {
prod.subcategory = subcat.name;
prod.category = category.name;
prod.qty = 1;
$scope.orderContent.products.push(prod);
}
事件更好,在数组上使用类似于find的函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.