我有一组Device
个对象,使用$resource
定期从REST服务器获取。只要发生这种情况,UI就会“重新加载”,这意味着再次执行此设备数组的ng-repeat
。 DOM更新很烦人,因为它搞砸了当前用户与设备的交互。相反,我希望新获取的Device
数组仅更新现有的数组,而且更改了内容。因此,如果我得到一个新的Device
数组,并且10个设备中只有一个更改名称,那么只有该设备名称的单个数据绑定才会产生DOM更新。
我找不到这样做的方法。由于这对我来说似乎是一个常见问题,我想在编写自己的“mergeUpdate
”方法之前先询问,该方法基本上只进行深度比较替换操作,并且只将事物写入实际已更改的现有绑定中。服务器端。
请注意,每个设备都由id
唯一标识,因此可以使用此算法。如果没有这个id
字段,它将无效(可能是AngularJS没有提供泛型方法的原因)。
实际上,angular.equals
是部分解决方案。现在我想要一些至少可以传输修改后的属性的东西,而不会使整个数组失效。
谢谢!
答案 0 :(得分:2)
您正在寻找的是ngrepeat的“追踪”。在你的情况下,
<div ng-repeat="item in items track by item.id"></div>
有了这个,ngrepeat将跟踪现有项目而不是重新渲染它们。合并逻辑是ngrepeat的内部。