web-dev-qa-db-fra.com

Liste inversée dans ng-repeat

J'ai donc un tableau que j'utilise ng-repeat pour restituer mais je veux inverser cette liste. Auparavant, j'ai utilisé un filtre obtenu de cette réponse: angular ng-repeat in reverse

Mais maintenant, je reçois une erreur: "TypeError: Object # n'a pas de méthode 'slice' Dans Scope." Je ne sais pas si c'est à cause d'une nouvelle version d'AngularJS ou s'il me manque quelque chose.

Ceci est mon code de filtre:

.filter('reverse', function () {
return function(items) {
    return items.slice().reverse();
};

Ceci est le code de ma vue de l'intérieur de la div:

data-ng-repeat='feed in feeds | reverse'
9
ph3bell

Pour rendre le tableau rendu en sens inverse et ordonné par 'id', ceci devrait fonctionner: 

data-ng-repeat="feed in feeds | orderBy:'id':true"

Laissez-moi savoir si cela fonctionne pour vous.

Pour votre référence: http://jsfiddle.net/byizzy/pgPVU/3/

16
goofie

C'est un peu délicat, mais pour toutes les personnes intéressées par l'inversion d'un tableau sans créer de nouvelles fonctions de prédicat et/ou modifier le tableau, etc.

ng-repeat="feed in feeds | orderBy:'':true"

ou

ng-repeat="feed in feeds | orderBy:'-'"

EXPLICATION
si vous laissez le second paramètre vide, alors Angular triera selon l'ordre par défaut du tableau (index), ajouter true à la fin activera le paramètre reverse de Angular 'orderBy

11
Shay Elkayam

Veuillez utiliser directement la fonction slice de script Java avec une inversion telle que celle-ci:

data-ng-repeat="item in items.slice().reverse()"
4
Manoj Patidar

Quelle est la structure d'un seul flux? Il semble que vous puissiez utiliser le filtre intégré d'angular pour le commander comme vous le souhaitez. Par exemple, si le champ "id" est ce qui fournit "order" dans le tableau, procédez comme suit: 

data-ng-repeat='feed in feeds | orderBy:id' 

Si vous voulez que cela soit inversé, faites simplement: 

data-ng-repeat='feed in feeds | orderBy:id:reverse'

Cela a-t-il du sens? Vous n'êtes pas sûr d'avoir besoin de votre propre filtre. Si tel est le cas, essayez peut-être de déboguer (c'est-à-dire écrire sur la console ou autrement) pour voir ce que vous êtes réellement en train de transmettre. Si ce n'est pas un tableau, c'est votre problème, sinon essayez ceci à la place:

return Array.prototype.slice.call(items).reverse(); 

Faites-moi savoir si l'un de ces travaux pour vous!

3
Jeremy Likness

J'espère que cela résoudra votre problème

data-ng-repeat='feed in feeds.reverse()'
1
Mohamed Abdullah J

une solution qui ne trie pas le tableau, mais le copie et l'inverse: ng-repeat="item in items | orderBy : '[]': true"

0
ChenR