Reputation: 97
I write this code:
<select required="required" ng-model="category" ng-init="category=''" ng-options="k as v for (k,v) in filter.category"></select>
$scope.filter.region = {
'': 'Все территории',
'1': 'РО',
'2': 'Ростов-на-Дону',
'3': 'Левенцовский',
'4': 'Ворошиловский',
'5': 'Железнодорожный',
'6': 'Кировский',
'7': 'Ленинский',
'8': 'Октябрьский',
'9': 'Первомайский',
'10': 'Пролетарский',
'11': 'Советский'
};
But Angular sorted it by keys:
<option value="" selected="selected">Все территории</option>
<option value="1">РО</option>
<option value="10">Пролетарский</option>
<option value="11">Советский</option>
<option value="2">Ростов-на-Дону</option>
<option value="3">Левенцовский</option>
<option value="4">Ворошиловский</option>
<option value="5">Железнодорожный</option>
<option value="6">Кировский</option>
<option value="7">Ленинский</option>
<option value="8">Октябрьский</option>
<option value="9">Первомайский</option>
How can I fix that? PS: I must use this signature of ng-options, because my value can be symbolic.
Upvotes: 3
Views: 826
Reputation: 10825
You can add orderBy
:
<select required="required" ng-model="category" ng-init="category=''" ng-options="k as v for (k,v) in filter.category | orderBy:'k'"></select>
Upvotes: 2
Reputation: 16498
Angular treat value as string so 11 is before 2 you can to that:
$scope.filter.region = {
'': 'Все территории',
'01': 'РО',
'02': 'Ростов-на-Дону',
'03': 'Левенцовский',
'04': 'Ворошиловский',
'05': 'Железнодорожный',
'06': 'Кировский',
'07': 'Ленинский',
'08': 'Октябрьский',
'09': 'Первомайский',
'10': 'Пролетарский',
'11': 'Советский'
};
Upvotes: 1