Is er een manier om ng-repeat een bepaald aantal keren te laten herhalen in plaats van steeds over een array te moeten itereren?
Bijvoorbeeld, hieronder wil ik de lijst items 5 keer laten verschijnen, ervan uitgaande dat $scope.number
gelijk is aan 5 in aanvulling op het verhogen van het aantal, zodat elke lijst item stijgt als 1, 2, 3, 4, 5
Gewenst resultaat:
<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>
Op dit moment accepteert ng-repeat
alleen een verzameling als parameter, maar je zou dit kunnen doen:
<ul>
<li ng-repeat="i in getNumber(number)"><span>{{$index+1}}</span></li>
</ul>
En ergens in je controller:
$scope.number = 5;
$scope.getNumber = function(num) {
return new Array(num);
}
Dit zou je in staat stellen om $scope.number
te veranderen in elk nummer dat je maar wilt en nog steeds de binding te behouden die je zoekt.
[Hier is een fiddle][1] met een paar lijsten die dezelfde getNumber
functie gebruiken.
EDIT 1/6/2014: Nieuwere versies van Angular 1.x maken gebruik van de volgende syntax:
<li ng-repeat="i in getNumber(number) track by $index">
EDIT 9/25/2018: Nieuwere versies van Angular 1.x staan je toe om dit zonder functie te doen. Als je code eenvoudig is en je hebt om andere redenen geen getNumber
functie nodig, dan kun je dat nu weglaten en gewoon dit doen:
<div ng-repeat="x in [].constructor(number) track by $index">
Credit aan @Nikhil Nambiar van zijn antwoord hieronder voor deze update
Hier is een voorbeeld van hoe je dit zou kunnen doen. Merk op dat ik geïnspireerd werd door een opmerking in de ng-repeat docs:
Let op de ng-repeat richtlijn:
<div ng-app>
<div ng-controller="TestCtrl">
<div ng-repeat="a in range(5) track by $index">{{$index + 1}}</div>
</div>
</div>
Hier is de controller:
function TestCtrl($scope) {
$scope.range = function(n) {
return new Array(n);
};
};