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

按字母顺序按AngularJS排序下拉列表,angularjs,Angularjs,我通过使用ng选项填充一个下拉列表,该选项连接到一个控制器,该控制器反过来调用一个服务。不幸的是,输入的数据非常混乱,我需要能够按字母顺序排序 你认为像$这样的东西可以解决这个问题,但不幸的是,它没有解决杰克的问题。我知道我可以通过javascript使用helper方法函数asc(a,b)或类似的方法对其进行排序,但我不相信没有更干净的方法可以做到这一点,而且我不想使用helper方法使控制器膨胀。这是一个非常基本的原则,所以我不明白为什么AngularJS没有这个 是否有一种方法可以执行类似

我通过使用ng选项填充一个下拉列表,该选项连接到一个控制器,该控制器反过来调用一个服务。不幸的是,输入的数据非常混乱,我需要能够按字母顺序排序

你认为像
$这样的东西可以解决这个问题,但不幸的是,它没有解决杰克的问题。我知道我可以通过javascript使用helper方法
函数asc(a,b)
或类似的方法对其进行排序,但我不相信没有更干净的方法可以做到这一点,而且我不想使用helper方法使控制器膨胀。这是一个非常基本的原则,所以我不明白为什么AngularJS没有这个

是否有一种方法可以执行类似于
$orderBy('asc')
的操作

例如:


orderBy中设置选项将非常有用,这样您就可以在通常尝试对数据进行排序时做任何您想做的事情

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

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

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

orderBy
可以接受第三个选项作为
reverse
标志

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

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

@看


对于希望在第三层对变量进行排序的任何人:

<select ng-option="friend.pet.name for friend in friends"></select>

你可以这样做

<select ng-option="friend.pet.name for friend in friends | orderBy: 'pet.name'"></select>


或者也可以:)查看小提琴(或者在角度ToDo教程中添加一个排序选择标记),获取一个显示为“已选择”的选项,甚至获取第一个显示选项都是一个问题。“角度”是空白的?@ DaveEvutt设置默认值(和删除空白项)的一种方法是预先选择绑定项为<代码>选择。对于本例,您可以执行类似于
$scope.selected=$scope.friends[0]
的操作。请参阅以获取一个工作示例。如果我希望在选定的JSON元素中使用年龄作为值,而不是整个JSON元素,该怎么办?@Rishi请尝试以下ng选项:
f.age作为f.name作为f.name在friends中使用| orderBy:'name'
-是一个工作小提琴。更多关于ng选项的信息。@Gloopy,这个答案让我有了90%的成功率。您是否介意为何时使用track by添加一个案例<代码>。将
track by
放在顺序过滤器后不是很直观,这个答案是谷歌的顶级搜索结果。在这里,一点文字解释一下这是如何回答OP的问题和/或你将如何使用它会很有帮助。@Seantheban我已经给了fiddle演示,所以我没有给出解释。@TechnoCrat解释如下无论如何,我更喜欢。事实上,了解为什么这个解决方案会比几年前发布的方案更受欢迎,这将是一件特别有趣的事情。或者,它到底有什么不同…@Chipowski ok。接下来,我将尝试给出解释和答案。
<select ng-option="friend.pet.name for friend in friends | orderBy: 'pet.name'"></select>