我在桌面行上有一个转发器,其集合经常更新。表格行包含一个按钮。
如果用户在更新转发器集合的同时单击按钮,则不会触发按钮的事件。原因似乎是用户在重新绘制按钮的同时点击...
有没有办法不更新转发器内的某些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>
答案 0 :(得分:2)
尝试使用track by
<tr ng-repeat="item in collection track by item.$index">
在此处搜索track by
:https://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。