ngAnimate 以间隔检测 $http-call 的变化

ngAnimate to detect changes from $http-call with interval

我有一个包含一些项目的数组。每隔 x 秒,我就会收到一个包含最新数据的新数组。我检查数据是否已经改变,如果有,我用新的替换旧的:

if (currentList != responseFromHttpCall) {
    currentList = responseFromHttpCall;
}

这弄乱了 ng-animate 提供的 类,因为它就像我替换了所有项目一样——好吧,我确实替换了,但我不知道如何不替换。

列表中可能会发生这些变化:

  1. 列表中有一个(或多个)新项目 - 但不一定在列表末尾。
  2. 列表中的一项(或多项)可能已消失(已删除)。
  3. 一个(或多个)项目可能会被更改。
  4. 两个(或更多)项可能已被调换。

任何人都可以帮助我让 ng-animate 理解 类 要显示的内容吗?我对我的问题做了一个小 "illustation",在这里找到:http://plnkr.co/edit/TS401ra58dgJS18ydsG1?p=preview

非常感谢!

要实现您想要的效果,您需要在每个操作上修改控制器 (vm.list) 上的现有列表。我有一种解决方案可能适用于您的特定示例。

您需要比较 2 个列表(首先循环)类似于:

vm.list.forEach((val, index)=>{
  // some code to check against array that's coming from ajax call
});

在添加的情况下,您需要循环其他列表(在您的情况下 newList):

 newList.forEach((val, index)=>{
   // some code to check array on controller
 });

我并不是说这是最好的解决方案,但它确实有效并且适用于您的情况。请记住 - 要正确测试,您需要在每次操作后单击重置,因为您正在查看相同的全局 original 列表,该列表将在整个应用程序周期中保留相同的数据,因为我们不会更改它 - 如果您想要更改它只是在每个函数结束之前添加:

original = angular.copy(vm.list);

你也可以让它更通用,把所有的东西都放在一个函数上,但是例如,这里是 plnkr:

http://plnkr.co/edit/sr5CHji6DbiiknlgFdNm?p=preview

希望对您有所帮助。