是否有一种方法可以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>

其他回答

我也遇到了同样的问题。我偶然发现了这条线索,但不喜欢他们在这里的方法。我的解决方案是使用我们已经安装好的underscore.js。其实很简单:

<ul>
    <li ng-repeat="n in _.range(1,6)"><span>{{n}}</span></li>
</ul>

这正是你想要的。

下面是一个如何做到这一点的例子。请注意,我的灵感来自ng-repeat文档中的一个注释:http://jsfiddle.net/digitalzebra/wnWY6/

注意ng-repeat指令:

<div ng-app>
    <div ng-controller="TestCtrl">
        <div ng-repeat="a in range(5) track by $index">{{$index + 1}}</div>
    </div>
</div>

这是控制器:

function TestCtrl($scope) {
    $scope.range = function(n) {
        return new Array(n);
    };
};

下面是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的数字,它将不起作用,但在某些情况下可能有用。

在Ivan的第一个答案上展开一点,只要字符是唯一的,你可以使用一个字符串作为集合,而不使用track by语句,所以如果用例少于10个数字(就像在问题中那样),我将简单地这样做:

<ul>
   <li ng-repeat="n in '12345'"><span>{{n}}</span></li>
</ul>

当然,这有点古怪,但看起来足够简单,也不是特别令人困惑。