错误:ngRepeat:dupes Repeater中的重复键(需要通过$ index跟踪)

时间:2016-08-26 10:28:09

标签: angularjs

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

请参阅Plunker中的自述文件,了解以下说明:

我想在“INJECT NEW”按钮下创建一个空白输入 被点击的那个,而不是最后的。

他们最终被添加的原因是:

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

track by $index打破注射。

如果我拿出track by $index,我就会收到错误消息: https://docs.angularjs.org/error/ngRepeat/dupes?p0=problem%20in%20problems&p1=object:171&p2= {%22key%22:空,%22component%22:空,%22 $$ hashKey%22:%22object:171%22}

如何才能获得注入功能但不会出现错误?

2 个答案:

答案 0 :(得分:3)

可以更改下面的方法并使其正常工作:

$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">

我相信它会起作用。

答案 1 :(得分:0)

根据您的问题,我将向您发送所需的答案。

请查看附件链接并查看代码。你会找到解决方案。

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