angularjs:$ index如何在ng-repeat中工作?

时间:2013-10-14 12:09:12

标签: javascript angularjs

考虑下表:

 <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>&nbsp; delete</button>
        </td>
    </tr>
</tbody>

如果我删除一个作业,行id将被传递给该函数,它可以正常工作。

 scope.deleteJob = function (id) {
                scope.jobs.splice(id, 1);
            }

但是,如果我将deleteJob($index)更改为deleteJob({{$index}}),则索引仍会传递给函数,但是如果我删除第1行,则第2行的索引将保持为2并且不会更新。 / p>

为什么?这两种方法有什么区别?

2 个答案:

答案 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