所以我有一个工作区列表:
<li class="workspace-object" ng-repeat="w in workspaces | filter:searchQuery" ng-click="selectWorkspace(w)">
<a href="" class="workspace-link">{{w.name | titleCase }}</a>
</li>
该列表通过某个函数在数据库中更新,然后我调用下面的loadWorkspaces函数,重新填充$ scope.workspaces对象
$scope.loadWorkspaces = function() {
APIService.getWorkspaces().then(function(data){
$scope.workspaces = data;
});
}
当发生这种情况时,$ scope.workspaces在注销时会立即读取正确的更新信息,但是,ng-repeat DUPLICATES会在更新到正确的列表之前。我不知道为什么会这样。有任何想法吗? 在此示例中,我正在更新工作区标题,该更新运行loadworkspaces函数。
答案 0 :(得分:5)
试试这个......
w in workspaces track by $index
当集合的内容发生变化时,ngRepeat会生成相应的&gt;更改DOM:
- 添加项目时,会将新模板实例添加到DOM中。
- 删除项目后,将从DOM中删除其模板实例。
- 重新排序项目时,各自的模板将在DOM中重新排序。
默认情况下,ngRepeat不允许在数组中使用重复项。这是因为当存在重复项时,不可能在集合项和DOM元素之间保持一对一的映射。
如果您确实需要重复重复项目,则可以使用跟踪表达式替换默认跟踪行为。
例如,您可以使用特殊范围属性$ index
按集合中每个项目的索引跟踪项目。
答案 1 :(得分:0)
接受的答案对我没有帮助(使用Angular 1.1.10),我的重复仍然在延迟更新。在努力工作之前,我已经奋斗了很久。
而不是像这样重复我的自定义指令;
<my-directive ng-repeat="item in myarray track by item.id" some-binding="item"></my-directive>
在将ng-repeat移至(非指令)父元素之后,我(神奇地)使其工作了,就像这样:
<div ng-repeat="item in myarray track by item.id">
<my-directive some-binding="item"></my-directive>
</div>