Сортировка в алфавитном порядке в AngularJS

Я заполняю раскрывающийся список с помощью ng-options, который подключен к контроллеру, который, в свою очередь, вызывает службу. К сожалению, входящие данные - беспорядок, и мне нужно иметь возможность сортировать его по алфавиту.

Вы видите, что что-то вроде $.sortBy сделает это, но, к сожалению, он не сделал jack. Я знаю, что могу сортировать его с помощью javascript со вспомогательным методом function asc(a,b) или что-то в этом роде, но я отказываюсь верить, что нет более чистого способа сделать это, и я не хочу раздувать контроллер с помощью вспомогательных методов. Это принципиально принципиально, поэтому я не понимаю, почему у AngularJS этого нет.

Есть ли способ сделать что-то вроде $orderBy('asc')?

Пример:

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

Было бы очень полезно иметь опции в orderBy, чтобы вы могли делать все, что захотите, всякий раз, когда вы обычно пытаетесь сортировать данные.

Ответ 1

Angular имеет orderBy фильтр, который можно использовать следующим образом:

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

См. эту скрипту для примера.

Стоит отметить, что если track by используется, он должен появиться после фильтра orderBy, например:

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

Ответ 2

Вы должны иметь возможность использовать фильтр: orderBy

orderBy может принять третий вариант для флага reverse.

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

Здесь элемент сортируется по свойству 'name' в обратном порядке. Второй аргумент может быть любой функцией заказа, поэтому вы можете сортировать в любом правиле.

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

Ответ 3

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/