ng-repeat内的按钮

时间:2014-06-12 12:31:08

标签: angularjs angularjs-ng-repeat

我在桌面行上有一个转发器,其集合经常更新。表格行包含一个按钮。

如果用户在更新转发器集合的同时单击按钮,则不会触发按钮的事件。原因似乎是用户在重新绘制按钮的同时点击...

有没有办法不更新转发器内的某些DOM元素,比如按钮?

<table>
    <tr>
        <th>Name</th>
        <th>Action</th>
    </tr>
    <tr ng-repeat="item in collection">
       <td>{{item.name}}</td>
        <td>
            <button ng-click="doSomething(item)"></button>
        </td>
    </tr>
</table>

2 个答案:

答案 0 :(得分:2)

尝试使用track by

<tr ng-repeat="item in collection track by item.$index">

在此处搜索track byhttps://docs.angularjs.org/api/ng/directive/ngRepeat

答案 1 :(得分:1)

不确定这是否可以解决您的问题,但如果您的收藏品具有唯一标识符,例如item.id,那么您可以将track by表达式添加到ng-repeat

    <tr ng-repeat="item in collection track by item.id">

这样做的结果是,如果更新整个集合($scope.collection = someUpdatedCollection),angularjs不会重新呈现每一行的html,但会尝试匹配旧集合和新集合的项目跟踪表达式,并仅更新已更改的部分。这通常也会带来显着的性能改进,即在集合更新时呈现HTML。