440 votes

Façon de ng-repeat nombre défini de fois au lieu de répéter plus de tableau?

Est-il un moyen de ng-repeat un nombre défini de fois au lieu de toujours l'avoir à parcourir un tableau?

Par exemple, ci-dessous je veux l'élément de la liste pour afficher jusqu'à 5 fois en supposant $scope.number égal à 5, de plus en incrémentant le numéro de chaque élément de la liste par incréments de 1, 2, 3, 4, 5

Résultat souhaité:

<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>

594voto

sh0ber Points 6566

Pour le moment, ng-repeat accepte uniquement une collection en tant que paramètre, mais vous pourriez faire ceci:

<ul>
    <li ng-repeat="i in getNumber(number)"><span>{{$index+1}}</span></li>
</ul>

Et quelque part dans votre contrôleur:

$scope.number = 5;
$scope.getNumber = function(num) {
    return new Array(num);   
}

Cela vous permettra de changer de $scope.number vers n'importe quel numéro que vous s'il vous plaît et encore maintenir la liaison que vous cherchez.

Voici un violon avec un couple de listes en utilisant le même getNumber fonction.

EDIT 1/6/2014: des versions plus Récentes de Angulaire utiliser la syntaxe suivante:

<li ng-repeat="i in getNumber(number) track by $index">

144voto

akonsu Points 9020

vous pouvez faire ceci:

<div ng-repeat="i in [1, 2, 3, 4]">
  ...
</div>

93voto

Polaris878 Points 7833

Voici un exemple de comment vous pouvez le faire. Notez que j'ai été inspiré par un commentaire dans le ng-repeat docs: http://jsfiddle.net/digitalzebra/wnWY6/

Remarque la ng-repeat directive:

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

Ici, c'est le contrôleur:

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

84voto

jeffmayeur Points 402

Je pense que ce jsFiddle à partir de ce fil pourrait être ce que vous cherchez.

<div ng-app ng-controller="Main">
   <div ng-repeat="item in items | limitTo:2">
       {{item.name}}
   </div>
</div>

49voto

Mark Roach Points 321

J'ai rencontré le même problème. Je suis tombé sur ce thread, mais n'aime pas les méthodes qu'ils avaient ici. Ma solution a été à l'aide de underscore.js, qui nous avait déjà installé. C'est aussi simple que cela:

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

Cela va faire exactement ce que vous cherchez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X