AngularJS:差异REST更新以避免闪烁?

时间:2015-05-16 14:42:53

标签: javascript angularjs rest

我有一组Device个对象,使用$resource定期从REST服务器获取。只要发生这种情况,UI就会“重新加载”,这意味着再次执行此设备数组的ng-repeat。 DOM更新很烦人,因为它搞砸了当前用户与设备的交互。相反,我希望新获取的Device数组仅更新现有的数组,而且更改了内容。因此,如果我得到一个新的Device数组,并且10个设备中只有一个更改名称,那么只有该设备名称的单个数据绑定才会产生DOM更新。

我找不到这样做的方法。由于这对我来说似乎是一个常见问题,我想在编写自己的“mergeUpdate”方法之前先询问,该方法基本上只进行深度比较替换操作,并且只将事物写入实际已更改的现有绑定中。服务器端。

请注意,每个设备都由id唯一标识,因此可以使用此算法。如果没有这个id字段,它将无效(可能是AngularJS没有提供泛型方法的原因)。

实际上,angular.equals是部分解决方案。现在我想要一些至少可以传输修改后的属性的东西,而不会使整个数组失效。

谢谢!

1 个答案:

答案 0 :(得分:2)

您正在寻找的是ngrepeat的“追踪”。在你的情况下,

<div ng-repeat="item in items track by item.id"></div>

有了这个,ngrepeat将跟踪现有项目而不是重新渲染它们。合并逻辑是ngrepeat的内部。