如何在ng-options中对AngularJS中的数组进行排序?

时间:2015-06-02 13:00:18

标签: angularjs

我有这个简单的数组:

$scope.myArray = ['3', '1', '2', '4'];

在我的模板中,我使用ng-options创建一个选择列表:

<select ng-options="key as value for (key, value) in myArray | orderBy : '-value'"></select>

但按-value排序不起作用。我如何按降序对这个数组进行排序?

4 个答案:

答案 0 :(得分:2)

orderBy参数可以是属性,因此您可能只想:

<select ng-options="key as value for (key, value) in myArray | orderBy: '-toString()'">

请参阅here以获取示例

答案 1 :(得分:0)

您可以使用订单功能。您正在使用“字符串”作为整数。如果你真的想这样做,下面的方法就可以了。如果你不这样做,你可以删除parseInt并使用项目。我也匹配了你不需要的key as value。你可以value for value in data

<div ng-app="myapp">
<fieldset ng-controller="FirstCtrl">
    <select 
        ng-options="key as value for (key, value) in data | orderBy :orderFunc"
        ng-model="selectedId"></select>

    {{ selectedId }}
</fieldset>
</div>
//js
var myapp = angular.module('myapp', []);
myapp.controller('FirstCtrl', function ($scope) {
    $scope.data =['1','2','3','4','5','6','7','8','9'];
    $scope.orderFunc = orderFunc;
    function orderFunc(item){
        return -1 * parseInt(item, 10);
    }
});

http://jsfiddle.net/raLu20o9/

答案 2 :(得分:0)

这是一个解决方案。我们的想法是在反转之前使用slice()制作数组的副本。这样就可以避免修改原始数据:

 <select data-ng-model="data_selected" data-ng-options="key for key in data.slice().reverse()"></select>

,其中 $scope.data =["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"]

答案 3 :(得分:-2)

{{ orderBy_expression | orderBy : expression : false}}

解决方案是否更多地放在https://docs.angularjs.org/api/ng/filter/orderBy