Angularjs更新范围变量而不重新重复

时间:2014-06-18 20:42:58

标签: javascript angularjs

我的情况是我将项目分配给范围,例如:

$scope.items = [{
   name: 'one',
   value: 1
}{
   name: 'two',
   value: 2
}]

然后我使用ng-repeat来显示它。我有一个服务,每隔几秒就会提取数据并更新这个范围变量。问题是它在更新时会重新迭代。我试图使用angular.forEach并迭代目前在范围内的内容与新的内容,并简单地更新相应键的值,但这似乎并没有实际更新已经迭代的值。

我不希望每次有更新时都重复迭代。我有一些在一个指令中应用的样式,当它重新渲染它时忽略那些样式更改(它覆盖它们)也没有理由重新渲染每个项目,只有一个或两个可能有更新的值。有人会知道一个很好的解决方案吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

https://docs.angularjs.org/api/ng/directive/ngRepeat

ng-repeat现在有了一个名为track by的惊人选项,如果你的对象中有一个唯一的值,即id那么你可以像这样使用它

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

我已经对它进行了大量测试,因为之前我必须使用$$ hash,它运行良好且流畅