Existe uma maneira de repetir um número definido de vezes, em vez de ter de iterar sempre sobre uma matriz?
Por exemplo, abaixo quero que o item da lista apareça 5 vezes assumindo $scope.number
igual a 5, além de incrementar o número para que cada item da lista aumente como 1, 2, 3, 4, 5
Resultado desejado:
<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>
No momento, ng-repeat
só aceita uma coleção como parâmetro, mas você poderia fazer isso:
<ul>
<li ng-repeat="i in getNumber(number)"><span>{{$index+1}}</span></li>
</ul>
E algures no teu controlador:
$scope.number = 5;
$scope.getNumber = function(num) {
return new Array(num);
}
Isto permitir-lhe-ia alterar o $scope.number
para qualquer número que deseje e ainda manter a ligação que você're procura.
[Aqui está um violino][1] com um par de listas utilizando a mesma função getNumber
.
**EDIT 1/6/2014***: Novas versões do Angular 1.x fazem uso da seguinte sintaxe:
<li ng-repeat="i in getNumber(number) track by $index">
**EDIT 9/25/2018***: As novas versões do Angular 1.x permitem-lhe fazer isto sem uma função. Se o seu código é simples e você não'não precisa de uma função getNumber
por outras razões, você pode agora omitir isso e apenas fazer isso:
<div ng-repeat="x in [].constructor(number) track by $index">
Crédito a @Nikhil Nambiar da sua resposta abaixo para esta actualização
Aqui está um exemplo de como você poderia fazer isso. Note que fui inspirado por um comentário nos documentos ng-repeat:
Repare na directiva de repetição de ng-repeat:
<div ng-app>
<div ng-controller="TestCtrl">
<div ng-repeat="a in range(5) track by $index">{{$index + 1}}</div>
</div>
</div>
Aqui está o controlador:
function TestCtrl($scope) {
$scope.range = function(n) {
return new Array(n);
};
};