web-dev-qa-db-fra.com

ng-repeat spécifie un index de départ

Comment puis-je spécifier un index où une directive ng-repeat va commencer au lieu de zéro?

J'ai un ensemble de résultats et il me suffit de spécifier le premier, différent de zéro. 

45
Federico Vezzoli

Pas besoin de coder quoi que ce soit, c'est ce que angular a fait avec le filtre existant intégré limitTo . Utilisez simplement une limite négative. Dans la documentation pour l'argument limit:

La longueur du tableau ou de la chaîne renvoyé. Si le nombre limite est positif, limite le nombre d'éléments à partir du début de la source tableau/chaîne sont copiés. Si le nombre est négatif, limitez le nombre de les éléments de la fin du tableau/chaîne source sont copiés. La limite sera coupé si elle dépasse array.length. Si la limite est indéfinie, le l'entrée sera retournée inchangée.

Donc, vous l'utiliseriez comme dans le template:

<ul>
   <li data-ng-repeat="i in list | limitTo: (offset - list.length)">{{i}}</li>
</ul>

offset est votre index de départ. Voir exemple plunker .

Il y a un argument optionnel begin et vous n'avez donc pas besoin d'utiliser une limit négative, mais la begin n'était pas disponible avant angular v1.4, de sorte que j'ai collé à une limit négative dans mon exemple.

53
user2718281

Vous pouvez créer un filtre 

app.filter('startFrom', function() {
    return function(input, start) {
        if(input) {
            start = +start; //parse to int
            return input.slice(start);
        }
        return [];
    }
});

et ensuite vous l'utilisez juste sur le ng-repeat:

<div ng-repeat="item in items | startFrom : 2">{{item.Name}}</div>
37
Emanuel Ralha

Disons que vous avez une liste de items, vous pouvez le faire comme ceci:

<div ng-repeat="item in items" ng-if="$index >= myIndex">
   {{item.Name}}
</div>
31
Omri Aharon

Je créerais une fonction qui retourne le sous-tableau de désir. Cela peut aller dans le contrôleur ou la fonction de liaison d'une directive.

<span ng-repeat="item in getSubArray(0, 4)">...</span>

Et la fonction

$scope.getSubArray = function (start, end) {
   return array.slice(start, end);
}
4
Raulucco

Cela a fonctionné pour moi:

<element ng-repeat="round in view.rounds track by $index">
    <span>{{$index + 1}}</span>
</element>
3
Andre Kuznetcov

Cela pourrait faire l'affaire ...

<div ng-repeat="(i, item) in items">
    <p>{{i+1}}</p>
</div>
2
Arpp

Voici le résultat de ce que je cherchais:

angular.module('starter.filters', []).filter('startFrom', function() {
return function(input, start) {
    if(input) {
        start = +start; //parse to int
        appended = input.slice(0,start);
        initialArray = input.slice(start);
        finalArray= initialArray.concat(appended);
        return finalArray;
    }
    return [];
}
});

merci @emanuel

0
Federico Vezzoli