简单的单向绑定ng-repeat?

Dio*_*ian 28 angularjs angularjs-ng-repeat

我读过一些文章说过,如果有超过2000个项目,ng-repeat会导致性能不佳,因为有太多的双向绑定需要观察.我是angularjs的新手,无法理解ng-repeat和双向绑定之间的关系:

  1. ng-repeat(如输出json对象列表)是否必然会创建双向绑定?

  2. 是否有一种简单的方法只使用单向绑定进行ng-repeat?(最好不需要外部模块)

Cin*_*way 55

与上面提到的user1843640一样,如果您使用的是Angular 1.3,则可以使用一次性绑定,但是,为了清楚起见,您需要将:: on放在所有绑定上,而不仅仅是转发器.文档说这样做:

<div ng-repeat="item in ::items">{{item.name}}</div>

但是,如果我算上观察者,这只会删除一个.要真正删除双向绑定的数量,将::放在转发器中的绑定上,如下所示:

<div ng-repeat="item in ::items">{{::item.name}}</div>

这里有两个将显示观察者数量的掠夺者:

仅限所有Bindings
Repeater

感谢Miraage提供了计算观察者的功能/sf/answers/1642940491/


use*_*640 17

对于使用或升级到Angular 1.3的任何人,您现在可以使用"一次性绑定".对于ng-repeat,它看起来像这样:

<div ng-repeat="item in ::items">{{item.name}}</div>
Run Code Online (Sandbox Code Playgroud)

注意::items语法.

有关更多信息,请查看Angular文档中的表达式.


hia*_*ttp 3

这篇博文提出了一些有趣的解决方案。最终结果是:

升级到 AngularJS 1.1.5 并使用limitTo无限滚动。AngularJS ng-repeat 从 1.1.4 版本开始提供 limitTo 选项。我稍微调整了无限滚动指令,使得在高度不为窗口 100% 的容器内滚动成为可能。

基本上,您限制最初渲染的对象数量,然后使用无限滚动指令根据需要渲染更多对象。由于您不需要外部模块,因此只需使用您自己的脚本根据需要模仿无限滚动功能即可。

注意:这应该可以解决您的性能问题,但不会删除双向绑定。