考虑下表:
<tbody data-ng-repeat="job in jobs">
<tr>
<td>{{job.fileName}}</td>
<td>
<button class="btn" ng-click="deleteJob($index);"><i class="icon-delete"></i> delete</button>
</td>
</tr>
</tbody>
如果我删除一个作业,行id将被传递给该函数,它可以正常工作。
scope.deleteJob = function (id) {
scope.jobs.splice(id, 1);
}
但是,如果我将deleteJob($index)
更改为deleteJob({{$index}})
,则索引仍会传递给函数,但是如果我删除第1行,则第2行的索引将保持为2并且不会更新。 / p>
为什么?这两种方法有什么区别?
答案 0 :(得分:5)
这是因为当你使用$index
时,它是一个变量,但当你使用{{$index}}
值代替变量时。
如果您检查DOM,您会在第一个case($index)
中看到DOM中仍然看到$index
,但是当您使用{{$index}}
时,您会看到0,1,2 ..在DOM中。
如果你使用{{index}}
,当数组被更改时,你的DOM仍会有deleteJob(0),deleteJob(2)
......等等 - 错过了删除的索引。
如果您使用$index
,您的DOM将拥有$index
,这是一个代表实际当前索引的变量。
答案 1 :(得分:1)
我认为{{$index}}
是错误的,并且重复元素的迭代器偏移的有效使用必须是$index
。
$index
是迭代器,删除后,其中一项应分别更新。
当我们写{{$index}}
时表示 - 显示存储在迭代器中的当前值。
与其他语言一样,例如Java,如果我们在循环列表中运行(如ng-repeat
),我们只能使用迭代器来删除Item以防止索引问题
演示 Fiddle