Angular确实在HTML指令中提供了一些使用数字的for循环的支持:

<div data-ng-repeat="i in [1,2,3,4,5]">
  do something
</div>

但是,如果作用域变量包含一个具有动态数字的范围,那么每次都需要创建一个空数组。

在控制器中

var range = [];
for(var i=0;i<total;i++) {
  range.push(i);
}
$scope.range = range;

在HTML中

<div data-ng-repeat="i in range">
  do something
</div>

这是可行的,但这是不必要的,因为我们在循环中根本不会使用范围数组。有人知道设置最小/最大值的范围或规则吗?

喜欢的东西:

<div data-ng-repeat="i in 1 .. 100">
  do something
</div>

当前回答

这是jzm改进后的答案(我不能评论,否则我会评论她/他的答案,因为她/他包含错误)。 函数有一个开始/结束范围值,所以它更灵活,而且……它的工作原理。这个特殊的例子是在一个月的某一天:

$scope.rangeCreator = function (minVal, maxVal) {
    var arr = [];
   for (var i = minVal; i <= maxVal; i++) {
      arr.push(i);
   }
   return arr;
};


<div class="col-sm-1">
    <select ng-model="monthDays">
        <option ng-repeat="day in rangeCreator(1,31)">{{day}}</option>
    </select>
</div>

其他回答

我提出了一个稍微不同的语法,它更适合我一点,并添加了一个可选的下界:

myApp.filter('makeRange', function() {
        return function(input) {
            var lowBound, highBound;
            switch (input.length) {
            case 1:
                lowBound = 0;
                highBound = parseInt(input[0]) - 1;
                break;
            case 2:
                lowBound = parseInt(input[0]);
                highBound = parseInt(input[1]);
                break;
            default:
                return input;
            }
            var result = [];
            for (var i = lowBound; i <= highBound; i++)
                result.push(i);
            return result;
        };
    });

你可以用哪个

<div ng-repeat="n in [10] | makeRange">Do something 0..9: {{n}}</div>

or

<div ng-repeat="n in [20, 29] | makeRange">Do something 20..29: {{n}}</div>

@Mormegil的解决方案的改进

app.filter('makeRange', function() {
  return function(inp) {
    var range = [+inp[1] && +inp[0] || 0, +inp[1] || +inp[0]];
    var min = Math.min(range[0], range[1]);
    var max = Math.max(range[0], range[1]);
    var result = [];
    for (var i = min; i <= max; i++) result.push(i);
    if (range[0] > range[1]) result.reverse();
    return result;
  };
});

使用

<span ng-repeat="n in [3, -3] | makeRange" ng-bind="n"></span>

Three, two, one, zero, one, two, three

<span ng-repeat="n in [-3, 3] | makeRange" ng-bind="n"></span>

Minus 3, minus 2, minus 1, 0, 1, 2, 3

<span ng-repeat="n in [3] | makeRange" ng-bind="n"></span>

0, 1, 2, 3

<span ng-repeat="n in [-3] | makeRange" ng-bind="n"></span>

0-1-2-3

假设美元范围。referncerl是一个数组

for(var i=0; i<$scope.refernceurl.length; i++){
    $scope.urls+=$scope.refernceurl[i].link+",";
}

方法定义

下面的代码定义了一个方法range(),可用于应用程序MyApp的整个作用域。它的行为非常类似于Python的range()方法。

angular.module('MyApp').run(['$rootScope', function($rootScope) {
    $rootScope.range = function(min, max, step) {
        // parameters validation for method overloading
        if (max == undefined) {
            max = min;
            min = 0;
        }
        step = Math.abs(step) || 1;
        if (min > max) {
            step = -step;
        }
        // building the array
        var output = [];
        for (var value=min; value<max; value+=step) {
            output.push(value);
        }
        // returning the generated array
        return output;
    };
}]);

使用

只有一个参数:

<span ng-repeat="i in range(3)">{{ i }}, </span>

0, 1, 2,

有两个参数:

<span ng-repeat="i in range(1, 5)">{{ i }}, </span>

One, two, three, four,

有三个参数:

<span ng-repeat="i in range(-2, .7, .5)">{{ i }}, </span>

-2, -1.5, -1, -0.5, 0, 0.5,

使用UnderscoreJS:

angular.module('myModule')
    .run(['$rootScope', function($rootScope) { $rootScope.range = _.range; }]);

将此应用到$rootScope使其在任何地方都可用:

<div ng-repeat="x in range(1,10)">
    {{x}}
</div>