繁体   English   中英

这是Angular行为不一致还是JavaScript技能不佳?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM