如何使用AngularJS对下拉列表中的选项进行排序?
我有一个下拉列表,其中包含用于选项的对象数组:如何使用AngularJS对下拉列表中的选项进行排序?,angularjs,Angularjs,我有一个下拉列表,其中包含用于选项的对象数组: <select class="auc-form-control" ng-options="dataValue.Id as dataValue.Name for (dataKey, dataValue) in Types" ng-model="name"> </select> 选项按Id排序,如下所示: <option value="0">0</option> <option value="
<select class="auc-form-control" ng-options="dataValue.Id as dataValue.Name for (dataKey, dataValue) in Types" ng-model="name">
</select>
选项按Id排序,如下所示:
<option value="0">0</option>
<option value="1">1</option>
<option value="10">10</option>
<option value="11">11</option>
...
"ng-options="dataValue.Id as dataValue.Name for (dataKey, dataValue) in Types" | orderBy:'Id'"
<select class="auc-form-control" ng-options="dataValue.Id as dataValue.Name for (dataKey, dataValue) in Types | orderBy:getSortValue" ng-model="name"></select>
0
1.
10
11
...
如何以自然的方式对选项进行排序?[1,2,3,…]可以这样使用的orderBy筛选器如何:
<option value="0">0</option>
<option value="1">1</option>
<option value="10">10</option>
<option value="11">11</option>
...
"ng-options="dataValue.Id as dataValue.Name for (dataKey, dataValue) in Types" | orderBy:'Id'"
<select class="auc-form-control" ng-options="dataValue.Id as dataValue.Name for (dataKey, dataValue) in Types | orderBy:getSortValue" ng-model="name"></select>
请用您的示例查看此。您的
Id
属性似乎是字符串(而不是数字)
在这种情况下,必须使用自定义getter来获取排序值。例如:
$scope.getSortValue = function (item) {
return +item.Id; // convert string to number
};
然后将其与orderBy
过滤器一起使用,如下所示:
<option value="0">0</option>
<option value="1">1</option>
<option value="10">10</option>
<option value="11">11</option>
...
"ng-options="dataValue.Id as dataValue.Name for (dataKey, dataValue) in Types" | orderBy:'Id'"
<select class="auc-form-control" ng-options="dataValue.Id as dataValue.Name for (dataKey, dataValue) in Types | orderBy:getSortValue" ng-model="name"></select>
示例Plunker:您能展示一下
类型的对象是什么样子的吗?您在这里缺少信息。正如Artyom在他的回答和评论中已经指出的,[0,1,10,11]是自然顺序,即数字。从你的问题来看,你不清楚你想要的对象是什么,或者你认为什么是“自然的”。请澄清。