2015-06-02 17 views
2

我有這個簡單的數組:如何在ng選項中對AngularJS中的數組進行排序?

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

在我的模板,我用ng-options創建一個選擇列表:

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

但是,-value排序不起作用。我如何按降序排列這個數組?

+0

我更新的下方添加了一個簡單的排序功能。 – Nix

回答

0

您可以使用命令FUNC。您正在使用「字符串」作爲整數。如果你真的想這樣做,下面的工作。如果你不能刪除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/

+0

您的解決方案不適用於指定OP的字符串。 –

+1

我很確定你實際上不能使用「值」變量。我的意思是:「data | orderBy:'-value'」不能正常工作?由於value是一個ng-repeat var,並且過濾器應用於全局數組。 – Okazari

+0

我更新了一個小提琴,從未更新過這篇文章。對不起 – Nix

2

的orderBy參數可以是財產,所以你可能只是想:

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

爲例

here
+1

這是這裏唯一可行的解​​決方案。謝謝本,我幾乎失去了對人性的信仰,看到其他答案... – Blackhole

+0

除了它不適用於他的樣本 –

+0

問題是在數組中存在一個符號值「Д」。看:http://jsfiddle.net/40xhrpj9/3/ – Faud

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"]

+0

介意解釋downvote? –

+0

這個想法很好。我會改進它使用過濾器,而不是內聯(它更可讀)。如果你想要一個例子http://stackoverflow.com/questions/30576111/reverse-scroll-direction-with-180-flipped-scroll-list/30576470#30576470我們只需要知道它是否回答這個問題...直到我們不知道真實的。 – Okazari

相關問題