代码之家  ›  专栏  ›  技术社区  ›  beingalex

错误:ngRepeat:复制中继器中的重复密钥(需要按$index跟踪)

  •  0
  • beingalex  · 技术社区  · 8 年前

    https://plnkr.co/edit/bpFi5WuojpNO2rh5vF3T?p=preview

    有关以下解释,请参阅Plunker中的自述文件:

    被点击的那个,不是在最后。

    在末尾添加它们的原因是:

    <div ng-repeat="problem in problems track by $index">
    

    这个 track by $index 正在中断注射。

    如果我拿出 按$index跟踪 然后我得到错误: https://docs.angularjs.org/error/ngRepeat/dupes?p0=problem%20in%20problems&p1=object:171&p2= {%22key%22:null,%22component%22:null,%22$$hashKey%22:%22对象:171%22}

    我如何拥有注入功能而不获取错误?

    2 回复  |  直到 8 年前
        1
  •  3
  •   victorjpe    8 年前

    $scope.addMotFault = function(idx) {
        if ($scope.problems.length > 1) {
    
            // Now more than one item, we need to 
            // inject the additional one under the clicked item
    
            // this index + 1
            problemPrototype.key = idx + 1;
            $scope.problems.splice(idx + 1, 0, angular.copy(problemPrototype));
    
    
        } else {
    
            // Only one item, so just push new problem
            // no need to "inject"
    
            problemPrototype.key = 0;
            $scope.problems.push(angular.copy(problemPrototype));
        }
    
    };
    

    html格式:

    <div ng-repeat="problem in problems" style="border: 1px #ccc solid; margin:5px; padding: 5px">
    

    我相信这会奏效的。

        2
  •  0
  •   Ravi Pandey    8 年前

    根据你的问题,我寄给你所需的答案。

    请找到所附的链接并仔细阅读代码。你会找到解决办法的。

    https://plnkr.co/edit/nhqAnD1hSKuIs9HTsT30?p=preview 您可以使用ngif-in-place$first,并可以根据长度进行检查。 <button ng-click="removeMotFault($index)" ng-if="problems.length > 1">REMOVE</button>