在AngularJS中按字母顺序排列下拉列表

我通过使用ng-options来挂载一个下拉菜单,挂钩到一个控制器,然后调用一个服务。 不幸的是,进来的数据是一团糟,我需要能够按字母顺序sorting。

你认为像$.sortBy这样做,但不幸的是,它没有做杰克。 我知道我可以通过JavaScript与辅助方法function asc(a,b)或类似的东西,但我拒绝相信有没有更干净的方式做这个,我不想用辅助方法膨胀控制器。 原则上这是基本的东西,所以我不明白为什么AngularJS没有这个。

有没有办法像$orderBy('asc')

例:

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

orderBy有选项是非常有用的,所以你可以做任何你想做的事情,每当你试图对数据进行sorting的时候。

Angular有一个orderByfilter,可以像这样使用:

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

看这个小提琴的例子。

值得注意的是,如果正在使用track by则需要在orderByfilter之后出现,如下所示:

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

你应该可以使用filter: orderBy

orderBy可以接受reverse标志的第三个选项。

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

这里的项目是按照“name”属性的顺序排列的。 第二个参数可以是任何顺序函数,所以你可以按任何规则sorting。

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

 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/