我创建了一个指令,用于在用户向下滚动时处理博客帖子的无限加载。
我想知道当使用ng-repeat呈现Feed时,AngularJS如何处理新博客帖子的添加。
例如
<article ng-repeat="post in posts">
// stuff...
</article>
每次使用新帖子更新posts
时,是否都会重新创建所有文章?假设只有新帖子附加到数组中。
ng-repeat足够智能,只能创建新帖子吗?
我担心在用户长时间向下滚动后,刷新率会变慢,因为ng-repeat会在每次从服务器获取新博客时重新创建所有博客。
答案 0 :(得分:2)
ng-repeat通过$id()
跟踪集合的项目:angular将标识与每个项目关联,如果向集合添加节点,则已经与现有项目关联的元素收藏品不会被重新创作。
OTOH,如果你的策略是每次向下滚动时重新创建一个新的项目集合,新项目将具有不同的标识(即使它们代表与之前相同的帖子),而angular将重新创建所有DOM元素。这就是track by
的用途:它允许告诉ng-repeat如何将DOM元素与集合的项目相关联。例如,您可以使用track by id
,并且先前与ID为3的项目相关联的元素将由ng-repeat保留,并与ID为3的新项目相关联。