是否有一种方法可以ng-repeat定义的次数,而不是总是要迭代一个数组?
例如,下面我希望列表项显示5次,假设为$scope。数字等于5,加上增加的数字,所以每个列表项都增加,如1,2,3,4,5
预期的结果:
<ul>
<li><span>1</span></li>
<li><span>2</span></li>
<li><span>3</span></li>
<li><span>4</span></li>
<li><span>5</span></li>
</ul>
下面是angular 1.2.x的答案
基本上是一样的,只是稍微修改了ng-repeat
<li ng-repeat="i in getNumber(myNumber) track by $index">
这是小提琴:http://jsfiddle.net/cHQLH/153/
这是因为angular 1.2不允许在指令中重复值。这意味着如果您尝试执行以下操作,将会得到一个错误。
<li ng-repeat="x in [1,1,1]"></li>
由于遍历字符串,它将为每个字符呈现一个项:
<li ng-repeat = "k in 'aaaa' track by $index">
{{$index}} //THIS DOESN'T ANSWER OP'S QUESTION. Read below.
</li>
我们可以使用数字|小数点后n位本机过滤器来使用这个丑陋但没有代码的解决方案。
<li ng-repeat="k in (0|number:mynumber -2 ) track by $index">
{{$index}}
</li>
这样我们就有了mynumber元素,而不需要额外的代码。说‘0.000’。
我们用mynumber - 2来补偿0。
对于低于3的数字,它将不起作用,但在某些情况下可能有用。
我也遇到过同样的问题,这就是我得出的结论:
(function () {
angular
.module('app')
.directive('repeatTimes', repeatTimes);
function repeatTimes ($window, $compile) {
return { link: link };
function link (scope, element, attrs) {
var times = scope.$eval(attrs.repeatTimes),
template = element.clone().removeAttr('repeat-times');
$window._(times).times(function (i) {
var _scope = angular.extend(scope.$new(), { '$index': i });
var html = $compile(template.clone())(_scope);
html.insertBefore(element);
});
element.remove();
}
}
})();
... 和html:
<div repeat-times="4">{{ $index }}</div>
生活的例子
我使用了下划线的时间函数,因为我们已经在项目中使用它,但你可以很容易地用本地代码替换它。