user3599334
user3599334

Reputation: 97

Angular ng-option is sorting by keys

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

Answers (2)

Alexander Kireyev
Alexander Kireyev

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

sylwester
sylwester

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

Related Questions