AngularJS外部ng重复不在内部ng重复上注册手表

AngularJS Outer ng-repeat not to register watches on inner ng-repeat

本文关键字:ng 注册 手表 在内部 AngularJS 外部      更新时间:2023-09-26

这与我的问题有关-Angular JS ng repeat消耗更多的浏览器内存

我的问题是,我需要嵌套的ng重复,并且由于注册了更多的手表,嵌套的ng反复会消耗更多的内存。

<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重复和内部ng重复操作的对象数量可以达到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

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

非常感谢您的帮助!

您可以编写一个指令,将usersitems都作为绑定属性(尤其是因为您的内部循环似乎独立于外部循环),然后手动嵌套两个循环,将内容添加到DOM,并为每个元素添加一个滚动侦听器。这是一种更难编码的方式,但观察者要少得多。