Angular biedt wel enige ondersteuning voor een for-lus met getallen binnen de HTML-richtlijnen:
<div data-ng-repeat="i in [1,2,3,4,5]">
do something
</div>
Maar als je scope variabele een bereik bevat dat een dynamisch getal heeft, dan zul je elke keer een lege array moeten maken.
In de controller
var range = [];
for(var i=0;i<total;i++) {
range.push(i);
}
$scope.range = range;
In de HTML
<div data-ng-repeat="i in range">
do something
</div>
Dit werkt, maar het is onnodig omdat we de range array helemaal niet zullen gebruiken binnen de loop. Kent iemand het instellen van een range of een gewone voor min/max waarde?
Zoiets als:
<div data-ng-repeat="i in 1 .. 100">
do something
</div>
Ik heb dit antwoord een beetje aangepast en kwam met [dit geklungel][2].
Filter gedefinieerd als:
var myApp = angular.module('myApp', []);
myApp.filter('range', function() {
return function(input, total) {
total = parseInt(total);
for (var i=0; i<total; i++) {
input.push(i);
}
return input;
};
});
Met de herhaling als volgt gebruikt:
<div ng-repeat="n in [] | range:100">
do something
</div>
Ik heb een iets andere syntaxis bedacht die me wat beter bevalt en die ook een optionele ondergrens toevoegt:
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;
};
});
die je kunt gebruiken als
<div ng-repeat="n in [10] | makeRange">Do something 0..9: {{n}}</div>
of
<div ng-repeat="n in [20, 29] | makeRange">Do something 20..29: {{n}}</div>
Voor degenen die nieuw zijn in angularjs. De index kan worden verkregen door gebruik te maken van $index.
Bijvoorbeeld:
<div ng-repeat="n in [] | range:10">
do something number {{$index}}
</div>
Dat zal, wanneer je Gloopy's handige filter gebruikt, afdrukken:
doe iets nummer 0
doe iets nummer 1
doe iets nummer 2
doe iets nummer 3
doe iets nummer 4
doe iets nummer 5
doe iets nummer 6
doe iets nummer 7
iets doen nummer 8
doe iets nummer 9