4

考虑下表:

 <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}})then,索引仍会传递给函数,但是如果我删除第 1 行,第 2 行的索引仍为 2,并且不会更新。

怎么来的 ?这两种方法有什么区别?

4

2 回答 2

5

这是因为当您使用$index它时,它是一个变量,但是当您使用使用{{$index}}的值而不是变量时。

如果您检查 DOM,您会在第一次case($index)看到仍然$index在 DOM 中看到,但是当您使用时,{{$index}}您会在 DOM 中看到 0,1,2...。

如果你使用{{index}},当数组被改变时,你的 DOM 仍然会有deleteJob(0),deleteJob(2)... 等等 - 缺少已删除的索引。

如果你使用$index你的 DOM 将会有$index,这是一个代表实际当前索引的变量。

于 2013-10-14T12:25:26.303 回答
1

我认为{{$index}}是错误的方法和重复元素的迭代器偏移的有效用法必须是$index

$index迭代器,删除后应分别更新其中一项。

当我们写{{$index}}意味着 - 显示存储在迭代器中的当前值。

就像在其他语言中一样,例如 Java,如果我们在 list 上循环运行(如ng-repeat),我们只能使用迭代器来删除 Item 以防止索引问题

演示Fiddle

于 2013-10-14T12:25:53.040 回答