Angularjs 不允许中继器中出现重复的ng中继器问题

Angularjs 不允许中继器中出现重复的ng中继器问题,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我试图创建一个如下的表单,在angular中使用ng repeat指令,每当我创建新行时它都会抱怨 “中继器中不允许重复。” 虽然我理解解决方案是通过放置“track by$index”,但它会导致另一个问题,即单击一行上的delete删除其他字段的值。所以我怀疑trackbyindex对于静态文本是可以的,但对于输入表单则不行。那么,如何在我的案例中正确使用ng repeat?请参阅我的演示 我当前的代码: HTML <div class="row-fluid spacer10">

我试图创建一个如下的表单,在angular中使用ng repeat指令,每当我创建新行时它都会抱怨 “中继器中不允许重复。”

虽然我理解解决方案是通过放置“track by$index”,但它会导致另一个问题,即单击一行上的delete删除其他字段的值。所以我怀疑trackbyindex对于静态文本是可以的,但对于输入表单则不行。那么,如何在我的案例中正确使用ng repeat?请参阅我的演示

我当前的代码:

HTML

<div class="row-fluid spacer10">
    <a ng-click="addAKA()" class="btn btn-primary spacer5 left30"><i class="icon-plus icon-white"></i> Add New Alias</a>
</div>
<div class="row-fluid spacer10"></div>
<div class="row-fluid spacer5" ng-repeat="item in aliasList track by $index">
    <input type="text" class="span6 left30" ng-model="item">
    <button class="btn btn-danger" ng-click="deleteAKA($index)">delete</button>
    <BR/>
</div>

只要改变你迭代的方式。与此相反:

<div ng-repeat="item in aliasList track by $index">

有关正确的解决方案,请参见此

您的方法存在多个问题

由于您直接将字符串绑定到ng模型,并且ng repeat创建了一个子范围,因此对该值的任何更改都不会反映出来。将范围模型更改为

$scope.list = [{text:"one"},{text:"two"}];
并绑定到
i.text
,而不是像前面那样绑定到
i

使用item而不是index调用了deleteItem方法。看到我的小提琴了吗


您能检查$index是基于0还是基于1吗。如果$index是基于1的,那么您需要执行
拼接(idx-1,1)否则它应该可以工作。$索引始终以角度为基础为0。看我的书
<div ng-repeat="item in aliasList">
<button ng-click='deleteItem($index)'>Delete</button>
$scope.list = [{text:"one"},{text:"two"}];