Сортировка в алфавитном порядке в 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/