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

J C*_*llo 156 angularjs

我正在通过使用ng-options填充下拉列表,该选项挂钩到控制器,控制器又调用服务.不幸的是,进入的数据很乱,我需要能够按字母顺序对其进行排序.

你认为这样的事情$.sortBy会发生,但不幸的是它没有做杰克.我知道我可以通过javascript使用辅助方法function asc(a,b)或类似的东西对它进行排序但是我拒绝相信没有更简洁的方法来做这个加上我不想用辅助方法膨胀控制器.它原则上是如此基本,所以我不明白为什么AngularJS没有这个.

有办法做某事$orderBy('asc')吗?

例:

<select ng-option="items in item.$orderBy('asc')"></select>
Run Code Online (Sandbox Code Playgroud)

拥有选项非常有用,orderBy这样您就可以随时尝试对数据进行排序.

Glo*_*opy 340

Angular有一个orderBy过滤器,可以像这样使用:

<select ng-model="selected" ng-options="f.name for f in friends | orderBy:'name'"></select>
Run Code Online (Sandbox Code Playgroud)

一下这个小提琴的例子.

值得注意的是,如果track by正在使用它,它需要出现在orderBy过滤器之后,如下所示:

<select ng-model="selected" ng-options="f.name for f in friends | orderBy:'name' track by f.id"></select>
Run Code Online (Sandbox Code Playgroud)

  • @Gloopy,这个答案让我90%的方式.您是否介意在使用track by时添加一个案例?`<select ng-model ="在朋友中为f选择"ng-options ="f.name | orderBy:'名称'跟踪f.id"> </ selected>`.在订单过滤后放置`track by`并不直观,这个答案是google的热门搜索结果. (7认同)
  • @DaveEveritt设置默认值(并删除空白项)的一种方法是预先选择"selected"的绑定项.对于此示例,您可以执行类似`$ scope.selected = $ scope.friends [0]`的操作.有关工作样本,请参见[this fiddle](http://jsfiddle.net/aBccw/142/). (2认同)

Tos*_*osh 26

你应该能够使用过滤器: orderBy

orderBy可以接受reverse国旗的第三个选项.

<select ng-option="item.name for item in items | orderBy:'name':true"></select>
Run Code Online (Sandbox Code Playgroud)

此处项目按"名称"属性按相反顺序排序.第二个参数可以是任何顺序函数,因此您可以对任何规则进行排序.

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

  • 或者只是<select ng-option ="item.name for items in item | orderBy:' - name'"> </ select>也可以:) (6认同)