web-dev-qa-db-fra.com

orderBy deux champs (un en sens inverse)

Je souhaite commander une liste d'amis par statut (premières en ligne, dernières hors ligne) et par ordre alphabétique Tout ce que je réussis à obtenir, c'est:

  • Premières en ligne/Ordre alphabétique inversé
  • Ou des premières hors ligne/ordre alphabétique

Voici plunker pour exposer mon problème

45
JMaylin

Remplacez le filtre orderBy par ceci:

orderBy:['-status','name']

Cela ordonnera par statut décroissant (en préfixant le caractère -), puis par nom croissant. Actuellement, vous passez true pour inverser le tri, ce qui rend le statut correct (en ligne en premier), mais les noms sont inversés (c'est-à-dire, décroissant).

Si vous souhaitez conserver le booléen inversé, vous pouvez utiliser orderBy:['status','-name']:true, mais cela semble moins clair que de simplement rendre status décroissant, comme indiqué précédemment.

102
Ahmad Mageed

Dans Angular 1.5.8, l'exemple précédent ne fonctionne pas . Une logique différente doit être appliquée.

Il semble que la logique de orderBy précédente soit appliquée à la suivante. Par conséquent, pour trier le nom ASC et le statut DESC, l'ordre des noms doit être respecté:

<li class="friend" ng-repeat="friend in friends | orderBy:'name':true | orderBy:'status':true">

Voici l'exemple fixé: http://plnkr.co/edit/0ZFIftSgNkU9F03xJztG?p=preview

0
nemanjabu

Il existe une autre option, vous pouvez avoir plusieurs filtres orderBy dans ng-repeat et cette ligne:

<li class="friend" ng-repeat="friend in friends | orderBy:['status','name']:true">

sera :

<li class="friend" ng-repeat="friend in friends | orderBy:'name':false | orderBy:'status':true">

Le dernier ordrePar est exécuté en premier et le dernier en dernier, etc ...

Voici mon plunkr: http://plnkr.co/edit/girPFzdi3Zx0yp0ASGVQ?p=preview

0
Allenile