Comment puis-je obtenir un tableau inversé en angulaire? j'essaie d'utiliser le filtre orderBy, mais il a besoin d'un prédicat (par exemple 'nom') pour trier:
<tr ng-repeat="friend in friends | orderBy:'name':true">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
<td>{{friend.age}}</td>
<tr>
Existe-t-il un moyen d'inverser le tableau d'origine, sans trier. comme ça:
<tr ng-repeat="friend in friends | orderBy:'':true">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
<td>{{friend.age}}</td>
<tr>
ng-repeat
comportement! @Trevor Senior a fait du bon travail.Réponses:
Je suggère d'utiliser un filtre personnalisé comme celui-ci:
Qui peut ensuite être utilisé comme:
Voyez-le fonctionner ici: Démonstration de Plunker
Ce filtre peut être personnalisé pour répondre à vos besoins comme bon vous semble. J'ai fourni d'autres exemples dans la démonstration. Certaines options incluent la vérification que la variable est un tableau avant d'effectuer l'inverse, ou la rendre plus indulgente pour permettre l'inversion de plus de choses telles que des chaînes.
la source
items.reverse()
modifiez le tableau au lieu d'en créer un nouveau et de le renvoyer.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 le renverser.C'est ce que j'ai utilisé:
Mettre à jour:
Ma réponse était OK pour l'ancienne version d'Angular. Maintenant, vous devriez utiliser
ng-repeat="friend in friends | orderBy:'-'"
ou
depuis https://stackoverflow.com/a/26635708/1782470
la source
track by
, c'est la seule façon qui a fonctionné pour moing-repeat="friend in friends | orderBy:'+': true track by $index"
Désolé d'avoir soulevé cette question après un an, mais il existe une nouvelle solution plus simple , qui fonctionne pour Angular v1.3.0-rc.5 et versions ultérieures .
Il est mentionné dans la documentation : "Si aucune propriété n'est fournie, (par exemple '+'), alors l'élément de tableau lui-même est utilisé pour comparer le tri". La solution sera donc:
ng-repeat="friend in friends | orderBy:'-'"
oung-repeat="friend in friends | orderBy:'+':true"
Cette solution semble être meilleure car elle ne modifie pas un tableau et ne nécessite pas de ressources de calcul supplémentaires (au moins dans notre code). J'ai lu toutes les réponses existantes et je leur préfère toujours celle-ci.
la source
v1.3.0-rc.4
). Si quelqu'un a la chance de l'essayer dans la nouvelle version, faites-le nous savoir!v1.3.0-rc.5
( documentation rc.5 vs documentation rc.4 ). J'ai mis à jour la réponseorderBy:'+':true
,orderBy:'-':true
,orderBy:'-':false
,orderBy:'+':false
:(Vous pouvez inverser par le paramètre $ index
la source
$index
). Je suis sur Angular 1.1.5.ng-repeat="friend in friends | orderBy:'id':true"
.Solution simple: - (pas besoin de faire de méthodes)
la source
Vous pouvez simplement appeler une méthode sur votre portée pour l'inverser pour vous, comme ceci:
Notez que le
$scope.reverse
crée une copie du tableau depuisArray.prototype.reverse
modifie le tableau d'origine.la source
si vous utilisez 1.3.x, vous pouvez utiliser ce qui suit
Exemple Liste des livres par date de publication dans l'ordre décroissant
source: https://docs.angularjs.org/api/ng/filter/orderBy
la source
Si vous utilisez angularjs version 1.4.4 et supérieure , un moyen simple de trier est d'utiliser " $ index ".
voir la démo
la source
Lorsque vous utilisez MVC dans .NET avec Angular, vous pouvez toujours utiliser OrderByDecending () lorsque vous effectuez votre requête db comme ceci:
Ensuite, du côté angulaire, il sera déjà inversé dans certains navigateurs (IE). Lors de la prise en charge de Chrome et FF, vous devrez ensuite ajouter orderBy:
Dans cet exemple, vous devez trier par ordre décroissant sur la propriété .Id. Si vous utilisez la pagination, cela devient plus compliqué car seule la première page serait triée. Vous devez gérer cela via un fichier de filtre .js pour votre contrôleur, ou d'une autre manière.
la source
Vous pouvez également utiliser .reverse (). C'est une fonction de tableau natif
<div ng-repeat="friend in friends.reverse()">{{friend.name}}</div>
la source
reverse
inverse le tableau en place, il ne renvoie pas seulement une copie inversée. Cela signifie que chaque fois que cela est évalué, le tableau est inversé.C'est parce que vous utilisez un objet JSON. Lorsque vous rencontrez de tels problèmes, changez votre objet JSON en objet tableau JSON.
Par exemple,
la source
Le
orderBy
filtre effectue un tri stable à partir d'Angular 1.4.5. (Voir la demande d'extraction GitHub https://github.com/angular/angular.js/pull/12408 .)Il suffit donc d'utiliser un prédicat constant et
reverse
défini surtrue
:la source
J'ai trouvé quelque chose comme ça, mais au lieu d'un tableau, j'utilise des objets.
Voici ma solution pour les objets:
Ajouter un filtre personnalisé:
Qui peut ensuite être utilisé comme
Si vous avez besoin de la prise en charge d'un ancien navigateur, vous devrez définir la fonction de réduction (ceci n'est disponible que dans ECMA-262 mozilla.org )
la source
J'étais moi-même frustré par ce problème et j'ai donc modifié le filtre créé par @Trevor Senior alors que je rencontrais un problème avec ma console en disant qu'elle ne pouvait pas utiliser la méthode inverse. J'ai également voulu garder l'intégrité de l'objet car c'est ce qu'Angular utilise à l'origine dans une directive ng-repeat. Dans ce cas, j'ai utilisé l'entrée stupide (clé) car la console va se fâcher en disant qu'il y a des doublons et dans mon cas, j'avais besoin de suivre par $ index.
Filtre:
HTML:
<div ng-repeat="items in items track by $index | reverse: items">
la source
J'ajoute une réponse que personne n'a mentionnée. J'essaierais de faire le serveur si vous en avez un. Le filtrage côté client peut être dangereux si le serveur renvoie de nombreux enregistrements. Parce que vous pourriez être obligé d'ajouter de la pagination. Si vous avez paginé depuis le serveur, le filtre client sur commande, serait dans la page actuelle. Ce qui dérouterait l'utilisateur final. Donc, si vous avez un serveur, envoyez la commande avec l'appel et laissez le serveur le renvoyer.
la source
Conseil utile:
Vous pouvez inverser votre tableau avec vanilla Js: yourarray .reverse ()
Attention: l'inverse est destructif, il changera donc votre tableau, pas seulement la variable.
la source
Je dirais que l'utilisation de la méthode inverse native de tableau est toujours un meilleur choix que de créer un filtre ou de l'utiliser
$index
.Plnkr_demo .
la source