Angularjs - простой фильтр ng-repeat orderBy не работает

У меня есть простой массив объектов:

  $scope.asd = [{"approved":true,"id":"542fb8972be5b5cc4356dd51","username":"k"},
{"approved":false,"id":"542fbea3bae6fe4449c838d5","username":"tototod"},
{"approved":false,"id":"54324929afafdb92209b2474","username":"asdasd"}
];

то в представлении я хочу напечатать значения и идентификатор orderBy или имя пользователя следующим образом:

<div ng-repeat="row in asd | orderBy:username:reverse">
{{row.username}}
</div>

OR

<div ng-repeat="row in asd | orderBy:id:reverse">
    {{row.id}}
    </div>

но не работает, что это может быть?

У меня нет ошибок консоли, и я просто следовал инструкциям здесь: https://docs.angularjs.org/api/ng/filter/orderBy

любая помощь приветствуется, спасибо


person itsme    schedule 06.10.2014    source источник
comment
reverse необязателен - его можно опустить   -  person Grundy    schedule 06.10.2014
comment
@ Гранди, нет, если он действительно хочет изменить порядок!?   -  person Yoshi    schedule 06.10.2014
comment
@Yoshi да, но в OP недостаточно информации :-)   -  person Grundy    schedule 06.10.2014
comment
@Yoshi Нет, действительно: P   -  person itsme    schedule 06.10.2014


Ответы (1)


В ваших примерах username и id нужно брать в кавычки! Это выражение должно возвращать строку, которая будет использоваться для поиска свойства объекта. Пожалуйста, обратитесь к документации еще раз, и вы увидите, что predicate — это переменная, которая преобразуется в строковое значение.

Решение:

<div ng-repeat="row in asd | orderBy:'username':true">
    {{row.username}}
</div>

Кроме того, reverse должно оцениваться как логическое выражение.

Работа с fiddle для ваших данных.

person ŁukaszBachman    schedule 06.10.2014
comment
Нет проблем, просто будьте осторожны с тем, что является выражением, а что переменной. Так вы избежите многих головных болей. - person ŁukaszBachman; 06.10.2014
comment
да, спасибо, я не заметил кавычек :D вы спасли мой день спасибо - person itsme; 06.10.2014