下划线_.range()不适用于AngularJS ng-repeat

Pau*_*nko 9 underscore.js angularjs

如果我只需要20次迭代,我该如何重复我的块?它不工作:

<div ng-repeat="item in _.range(20)"></div>
Run Code Online (Sandbox Code Playgroud)

UnderscoreJS包含在页面中

pko*_*rce 18

如果要在模板中使用undersore函数,则必须在范围上公开它.如果您希望在所有模板中都可以使用它,则可以采用以下方式:

var app = angular.module('angularjs-starter', []);

app.run(function($rootScope){
  $rootScope._ = _;
});
Run Code Online (Sandbox Code Playgroud)

然后,您可以尝试在模板中使用它:

<div ng-repeat="item in _.range(20)">{{item}}</div>
Run Code Online (Sandbox Code Playgroud)

这是一个有效的插件:http://plnkr.co/edit/1Va4EikvRyFiQvhb2HYV?p = preview

虽然上述工作不应该使用.模型应该在控制器中初始化.否则,AngularJS将_range在每个$ digest周期执行以生成新数组.

  • 正如帕维尔所说,这种解决方案令人不安.这个解决方案的问题是ng-repeat根本无法优化.每次角度脏检查`_.range(20)`它将返回一个新数组 - 然后ng-repeat,因为它有一个新的数组对象,每次将创建20个**新**元素.如果ng-repeat找到相同的数组,它可以保存元素.你应该做Pawel所说的并做`$ scope.range20 = _.range20`之类的东西 - 并且只在你需要一个新范围时重新生成它. (4认同)