Javascript 从服务器刷新并仅更新新元素

Javascript 从服务器刷新并仅更新新元素,javascript,ajax,arrays,angularjs,Javascript,Ajax,Arrays,Angularjs,我每隔几秒钟刷新一次服务器上的数据。一切都运行得很好,但在前一个数据以角度显示,下一个数据以角度添加的同时,数据会暂时增加一倍。对于ng animate,这一点尤其明显,因为每个元素都先设置动画,然后再设置动画 app.factory("models", function ($http) { return { models: [], fetchModels: function () { var models = this;

我每隔几秒钟刷新一次服务器上的数据。一切都运行得很好,但在前一个数据以角度显示,下一个数据以角度添加的同时,数据会暂时增加一倍。对于ng animate,这一点尤其明显,因为每个元素都先设置动画,然后再设置动画

app.factory("models", function ($http) {
    return {
        models: [],
        fetchModels: function () {
            var models = this;
            $http.get("/models").success(function (serverModels) {
                models.models = serverModels;
            }); 
        });
    };
});

我认为部分问题源于覆盖整个数组。Angular中有没有一种简单的方法(或任何方法)只将新的
serverModels
元素推送到数组中,这样就不必重写现有元素?

您可以在重复表达式中使用“track by”,以便Angular知道哪些项是唯一的,哪些项已经存在,哪些项是新的

即使您完全覆盖了作用域上的数组,Angular也会知道如何将CSS动画应用于由于唯一键而新增的项目

<div ng-repeat="item in data track by item.id"> {{item.name }}</div>
{{item.name}

这可能与覆盖范围上的模型无关,可能与ng LEVE和ng LEVE活动类上的CSS转换有关。下面是一个plunker,说明了它应该如何工作@pixelbits删除
++索引
行,并查看所有内容是否仍然再次设置动画(
test1
一次又一次)。这是不受欢迎的。你能通过比较identity属性来循环它们并检查重复的元素吗?如果不是这样的话,只能推送元素吗?@ExplosionPills,我明白了。假设您的模型有一个唯一的关键点,您可以在重复表达式中使用“track by”,以便angular知道哪些项是唯一的,哪些项已经存在,哪些项是新的。新项目-angular将设置动画。这里有一个更新的plunker:@mtyson我可以,但我想知道是否有一个更简单的方法来做到这一点/一个更角度的方法来做到这一点