angulaire ng-repeat dans le sens inverse
Comment puis-je obtenir l'inversion de la matrice angulaire?
je suis en train d'utiliser orderBy filtre, mais il a besoin d'un prédicat(par exemple, 'nom') à trier:
<tr ng-repeat="friend in friends | orderBy:'name':true">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
<td>{{friend.age}}</td>
<tr>
Est-il un moyen pour inverser tableau d'origine, sans tri.
comme ça:
<tr ng-repeat="friend in friends | orderBy:'':true">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
<td>{{friend.age}}</td>
<tr>
- C'est la nouvelle façon correcte stackoverflow.com/a/16261373/988830
- C'est le droit chemin, si vous voulez inverser un tableau avec une expression. Dans ce cas, la question était de savoir comment revere un tableau sans un.
- <tr ng-repeat="ami des amis | orderBy:'nom'">
- Voir ma réponse ci-dessous, pour la simple et 1 ligne et la solution correcte. Il n'y a pas besoin de faire toutes les méthodes. Je me demande pourquoi les gens sont à faire d'autres méthodes pour cela.
- Toujours utiliser des filtres pour changer la
ng-repeat
comportement! @Trevor Senior a fait un bon travail.
Vous devez vous connecter pour publier un commentaire.
Je vous suggérons d'utiliser un filtre personnalisé comme ceci:
Qui peut alors être utilisé comme:
Le constater ici: Plunker De Démonstration
Ce filtre peut être personnalisé pour répondre à vos besoins en tant que juge. J'ai fourni d'autres exemples dans la démonstration. Certaines options comprennent la vérification que la variable est un tableau avant d'effectuer l'inverse, ou les rendre plus indulgent pour permettre la reprise de plus en plus de choses comme des cordes.
items.reverse()
modifie le tableau au lieu de simplement en créer un nouveau et de le retourner.slice()
pour résoudre ce problème.if (!angular.isArray(items)) return false;
pour vérifier que vous disposez d'un tableau avant d'essayer de les inverser.if (!items) { return };
avant lareturn
d'arrêter de arrêter les erreurs de la console de tir surslice
C'est ce que j'ai utilisé:
Mise à jour:
Ma réponse était OK pour l'ancienne version de l'Angulaire.
Maintenant, vous devriez être en utilisant
ng-repeat="friend in friends | orderBy:'-'"
ou
de https://stackoverflow.com/a/26635708/1782470
track by
, c'est le seul moyen qui a fonctionné pour moing-repeat="friend in friends | orderBy:'+': true track by $index"
Désolé d'avoir cette place après une année, mais il y a un nouveau, solution plus facile, qui œuvres Angulaire v1.3.0-rc.5 et plus tard.
Il est mentionné dans la docs:
"Si aucune propriété n'est fournie (par exemple,'+'), alors l'élément du tableau lui-même est utilisé pour comparer les différences de tri". Donc, la solution sera:
ng-repeat="friend in friends | orderBy:'-'"
oung-repeat="friend in friends | orderBy:'+':true"
Cette solution semble être la meilleure car elle ne pas modifier un tableau et n'a pas besoin d'autres ressources de calcul (au moins dans notre code). J'ai lu toutes les réponses existantes et préfèrent encore cette un.
v1.3.0-rc.4
). Si quelqu'un obtient une chance de l'essayer dans la nouvelle version, laissez-nous savoir!v1.3.0-rc.5
(rc.5 docs et rc.4 docs). J'ai mis à jour la réponse1.3.4
version personnellement, ça marchait parfaitement il.orderBy:'+':true
,orderBy:'-':true
,orderBy:'-':false
,orderBy:'+':false
🙁orderBy:'+':false
ou même| orderBy:'+'
, j'ai encore un ordre inverse.Vous pouvez inverser par le $index paramètre
$index
). Je suis sur Angulaire 1.1.5.ng-repeat="friend in friends | orderBy:'id':true"
œuvres.Solution la plus Simple:- (pas besoin de faire toutes les méthodes)
Vous pouvez simplement appeler une méthode sur votre périmètre à l'inverse, pour vous, comme ceci:
Noter que le
$scope.reverse
crée une copie du tableau depuisArray.prototype.reverse
modifie le tableau d'origine.si vous utilisez 1.3.x, vous pouvez utiliser les éléments suivants
Exemple Liste des livres par date de publication, par ordre décroissant
source:https://docs.angularjs.org/api/ng/filter/orderBy
orderBy : '-publishedDate'
fonctionne également.Si vous êtes en utilisant angularjs version 1.4.4 et au-dessus de,un moyen facile de tri est à l'aide de la "$index".
voir la démo
Lors de l'utilisation de MVC dans .NET Angulaire, vous pouvez toujours utiliser OrderByDecending() lorsque vous faites votre db requête comme ceci:
Puis sur le côté Angulaire, il sera déjà inversée dans certains navigateurs (IE). Lors de l'appui Chrome et FF, vous devez l'ajouter orderBy:
Dans cet exemple, vous seriez dans l'ordre décroissant sur la .Id de propriété. Si vous êtes en utilisant la pagination, cela devient plus compliqué parce que seule la première page doit être trié. Vous auriez besoin de gérer cela via un .js filtre de fichier pour votre contrôleur, ou de quelque autre façon.
Vous pouvez également utiliser .reverse(). C'est un natif de la matrice de la fonction
<div ng-repeat="friend in friends.reverse()">{{friend.name}}</div>
reverse
renverse le réseau en place, il n'est pas juste de retour une copie inverse. Cela signifie que chaque fois que cela est évaluée, le tableau sera inversé.C'est parce que vous êtes à l'aide d'Objet JSON. Lorsque vous faites face à de tels problèmes, puis changer d'Objet JSON JSON Objet de Tableau.
Par Exemple,
La
orderBy
filtre effectue un stable tri comme Angulaire 1.4.5. (Voir le GitHub de pull request https://github.com/angular/angular.js/pull/12408.)Alors il suffit d'utiliser un constante prédicat et
reverse
ensemble detrue
:J'ai trouvé quelque chose comme cela, mais au lieu de tableau, j'utilise des objets.
Voici ma solution pour les objets:
Ajouter un filtre personnalisé:
Qui peut alors être utilisé comme
Si vous avez besoin de vieille prise en charge du navigateur, vous devrez définir la fonction de réduction (ceci est uniquement disponible en ECMA-262 mozilla.org)
J'avais obtenu frustré avec ce problème moi-même et j'ai donc modifié le filtre a été créé par @Trevor Hauts comme je l'ai été en cours d'exécution dans un problème avec ma console en disant qu'il ne pouvait pas utiliser la méthode inverse. J'ai aussi voulu garder l'intégrité de l'objet, car c'est ce Angulaire est à l'origine l'utilisation dans un ng-repeat directive. Dans ce cas, j'ai utilisé l'entrée de stupide (clé) parce que la console va s'énerver en disant: il y a des doublons et dans mon cas, j'avais besoin de piste par $index.
Filtre:
HTML:
<div ng-repeat="items in items track by $index | reverse: items">
Im ajoutant une réponse que personne n'a mentionné. Je voudrais essayer de faire le serveur le faire si vous en avez un. Client de filtrage peut être dangereux si le serveur renvoie un grand nombre de dossiers. Parce que vous pourriez être obligé d'ajouter la pagination. Si vous avez de la pagination à partir du serveur puis le client de filtre de la commande, serait dans la page en cours. Qui nuirait à l'utilisateur final. Donc, si vous avez un serveur, puis envoyer les orderby avec l'appel et de laisser le serveur retourner.
Conseil utile:
Vous pouvez inverser vous êtes tableau avec de la vanille Js: yourarray .reverse()
Attention: l'inverse est destructeur, il va changer youre tableau, non seulement de la variable.
Je suggérons à l'aide du tableau natif méthode inverse est toujours le meilleur choix sur la création d'un filtre ou à l'aide de
$index
.Plnkr_demo.