在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
则需要在orderBy
filter之后出现,如下所示:
<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。
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"; });