2017-01-30 29 views
0

我在集合上迭代選擇這樣看:NG選項:我如何排序collection.item.itemName

ctrl.countriesList = { 
    'DK': {countryName: 'Denmark', preferredLanguage: 'DA'} 
    'US': {countryName: 'USA', preferredLanguage: 'EN'} 
} 

和遍歷對象:

ng-options="country as country.countryName for country in $ctrl.countriesList" 

所以我的下拉菜單現在可以正確顯示每個國家/地區的下拉菜單中的countryName屬性,但它仍然按照ISO代碼值(DK,US)進行排序,在我的情況下,這通常會與國家/地區名稱不一致,因此countryNames中的countryNames排序下拉列表不是按字母順序排列的

如何使按國家/地區名稱按字母順序進行下拉式排序?提前致謝!

+0

這難道不是一種重複的:http://stackoverflow.com/questions/12310782/排序下拉列表中按字母順序排列的angularjs? – Georgy

+1

[在AngularJS中按字母順序排列下拉列表](http:// stackoverflow。com/questions/12310782/sorting-dropdown-alphabetically-in-angularjs) –

+0

感謝您的回答,但這些都不是重複的,因爲他們嘗試對數組進行排序,而我試圖對一個對象進行排序。 感謝您的答覆:) – Kozgal

回答

0

,你正在使用一個DataSource對象不能使用orderBy過濾器和orderBy過濾器適用於數組數據源

See this question

如果你想使用orderBy過濾器進行更改到數據源正如其他答案中提到的那樣

如果你想去對象,我會建議你添加一個函數,它將返回排序的值。

在控制器:

$scope.ctrl = {//---> Source 
      countriesList : { 
     'DK': {countryName: 'Denmark', preferredLanguage: 'DA'}, 
     'US': {countryName: 'USA', preferredLanguage: 'EN'}, 
     'BEL':{countryName: 'Belgium', preferredLanguage: 'NL'} 
     } 
} 



$scope.getSortedCountryList = function(){ //--> Sort Function 
$scope.sorted = {}; 
Object.keys($scope.ctrl.countriesList) 
     .sort(function(a,b){ 
      if($scope.ctrl.countriesList[a].countryName < $scope.ctrl.countriesList[b].countryName) return -1; 
      if($scope.ctrl.countriesList[a].countryName > $scope.ctrl.countriesList[b].countryName) return 1; 
      return 0; 
     }) 
     .forEach(function(v, i) { 
      $scope.sorted[v] = $scope.ctrl.countriesList[v]; 
     }); 
return $scope.sorted; 
} 

在HTML select

ng-options="country as country.countryName for country in getSortedCountryList()" 

FIDDLE

+0

好吧,所以我想這是不可能的,因爲我的對象結構排序。我會看看是否可以使用類似於您的建議的方式對結構進行排序,或者將整個數據結構交替更改爲數組。 將您的答案標記爲已接受 - 謝謝! – Kozgal

+0

我結束了使用你的排序功能!非常感謝! – Kozgal

+0

很高興幫助! :) – Nishant123

-1

首先將你的數據集重寫爲更簡單的JSON類似的方法。由於orderBy沒有(也不會)實施了Objectslink

$scope.countriesList = [ 
     {countryName: 'Denmark', preferredLanguage: 'DA'}, 
     {countryName: 'Belgium', preferredLanguage: 'NL'}, 
     {countryName: 'USA', preferredLanguage: 'EN'} 
    ] 

上查看級別:

<select ng-options="country.countryName for country in countriesList | orderBy:'countryName':false" ng-model="selected"></select> 

SEE PLUNKR

+0

如果我這樣做,我會放棄ISO代碼爲例如丹麥的「DK」 - 我需要這是不幸的關鍵 – Kozgal

-1

使用ORDERBY服務在您的選擇標記

<select ng-options="country as country.countryName for country in ctrl.countriesList | orderBy:'countryName':false" ng-model="country"> 

als O更新的JSON

$scope.ctrl.countriesList = [ 
    {countryName: 'Denmark', preferredLanguage: 'DA'}, 
    {countryName: 'USA', preferredLanguage: 'EN'} 
    ] 

Plunkr

+0

這將只在dataModel更新,不使用對象。請閱讀正確的問題。 –

+0

用戶沒有提到 –

+0

他在他的問題中陳述了這個字面意思。他甚至在他最初的問題中顯示了dataObject。你的回答不正確。 –

-1

您還可以排序您直接在Javascript數組。

$scope.countriesList = [ 
     {countryName: 'Denmark', preferredLanguage: 'DA'}, 
     {countryName: 'Belgium', preferredLanguage: 'NL'}, 
     {countryName: 'USA', preferredLanguage: 'EN'} 
    ] 
.sort(function(a, b){ 
    return a.countryName < b.countryName; 
}); 
+0

Your數組與OP數組格式相匹配嗎? –

+0

「OP」是什麼意思? –

+0

OP是原創的海報,但不幸的是我不能使用數組 - 我需要一個ISO對象作爲國家obj值的關鍵字。但是,謝謝你的建議! – Kozgal