AngularJS Outer ng-repeat不在内部ng-repeat上注册手表

时间:2013-06-29 11:10:33

标签: javascript angularjs angularjs-directive angularjs-scope angularjs-ng-repeat

这与我的问题有关 - Angular JS ng-repeat consumes more browser memory

我的问题是我需要嵌套的ng-repeats,嵌套的ng-repeats会因为注册了更多的手表而消耗更多的内存。

<table>
  <thead><td>Id</td><td>Name</td><td>Ratings</td></thead>
  <tbody>
   <tr ng-repeat="user in users | orderBy:'name' | limitTo:display_limit">
    <td>{{user.id}}</td>
    <td>{{user.name}}</td>
    <td><div ng-repeat="item in items | orderBy:'rating' | limitTo:inner_display_limit">{{item.rating}}</div></td>
   </tr>
  </tbody>
</table>

在我的情况下,外部ng-repeat和内部ng-repeat操作的对象数量可以达到1000.并且正如@Liviu在答案中指出的那样,each of the outer ng-repeat registers watch on the inner ng-repeat并导致可消耗的数量正在使用的内存。我们可以通过编写自己的自定义指令来avoid the outer ng-repeat from registering watches on inner ones吗?

我的情况是内部和外部重复,我显示最初的50个项目并滚动,如果滚动到达相应DOM的末尾,我将限制更新50,以便接下来的50个项目得到显示。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

您可以编写一个指令,将usersitems作为绑定属性(特别是因为看起来您的内部循环与外部循环无关),然后手动嵌套两个将添加的循环内容到DOM,以及向每个元素添加滚动侦听器。它更难以编码,但观察者却少得多。