ngAnimate用于检测来自$ http-call的更改并使用interval

时间:2017-10-13 16:46:21

标签: angularjs ng-animate

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

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

这弄乱了ng-animate提供的课程,因为它的行为就像我取代了所有项目 - 好吧,我确实做到了,但我不知道怎么做。

这些更改可以在列表中进行:

  1. 列表中有一个(或多个)新项目 - 但不一定在列表的末尾。
  2. 列表中的一个(或多个)项目可能已删除(已删除)。
  3. 可能会更改一个(或多个)项目。
  4. 可能已交换了两个(或更多)项目。
  5. 任何人都可以帮助我获取动画来理解要显示的类吗?我做了一个小小的插图"我的问题,在这里找到:http://plnkr.co/edit/TS401ra58dgJS18ydsG1?p=preview

    非常感谢!

1 个答案:

答案 0 :(得分:1)

要实现您的目标,您需要在每个操作上修改控制器(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

希望它有所帮助。