Liste déroulante de tri alphabétique dans AngularJS

Je remplis une liste déroulante grâce à l'utilisation de ng-options qui est accrochée à un contrôleur qui appelle à son tour un service. Malheureusement, les données qui arrivent sont un gâchis et je dois être capable de les Trier par ordre alphabétique.

Vous pensez que quelque chose comme $.sortBy le ferait mais malheureusement cela n'a pas fait jack. Je sais que je peux le trier via javascript avec une méthode d'aide function asc(a,b) ou quelque chose comme ça mais je refuse de croire qu'il n'y a pas de façon plus propre de le faire plus Je ne veux pas gonfler le contrôleur avec des méthodes d'aide. C'est quelque chose de si basique en principe, donc je ne comprends pas pourquoi AngularJS n'a pas cela.

Est-il un moyen de faire quelque chose comme $orderBy('asc')?

Exemple:

<select ng-option="items in item.$orderBy('asc')"></select>

Il serait extrêmement utile d'avoir des options dans orderBy afin que vous puissiez faire ce que vous voulez, chaque fois que vous essayez habituellement de trier les données.

149
demandé sur Eliran Malka 2012-09-07 06:01:39

4 réponses

Angular a un filtre orderBy qui peut être utilisé comme ceci:

<select ng-model="selected" ng-options="f.name for f in friends | orderBy:'name'"></select>

Voir ce violon pour un exemple.

, Il est intéressant de noter que si track by est utilisé, il doit apparaître après la orderBy filtre, comme ceci:

<select ng-model="selected" ng-options="f.name for f in friends | orderBy:'name' track by f.id"></select>
318
répondu Gloopy 2015-11-25 19:51:00

Vous devriez pouvoir utiliser filter: orderBy

orderBy peut accepter une troisième option pour la reverse drapeau.

<select ng-option="item.name for item in items | orderBy:'name':true"></select>

Ici l'élément est trié par la propriété 'name' dans un ordre inversé. Le 2ème argument peut être n'importe quelle fonction d'ordre, de sorte que vous pouvez trier dans toute règle.

@voir http://docs.angularjs.org/api/ng.filter:orderBy

24
répondu Tosh 2015-03-20 21:44:26
var module = angular.module("example", []);

module.controller("orderByController", function ($scope) {
    $scope.orderByValue = function (value) {
        return value;
    };

    $scope.items = ["c", "b", "a"];
    $scope.objList = [
        {
            "name": "c"
        }, {
            "name": "b"
        }, {
            "name": "a"
        }];
        $scope.item = "b";
    });

Http://jsfiddle.net/Nfv42/65/

0
répondu TechnoCrat 2015-02-26 17:06:20

Pour tous ceux qui veulent trier la variable en troisième couche:

<select ng-option="friend.pet.name for friend in friends"></select>

Vous pouvez le faire comme ceci

<select ng-option="friend.pet.name for friend in friends | orderBy: 'pet.name'"></select>
0
répondu Trieu Nguyen 2018-03-07 05:10:16