Ответ 1
Пока вы видите это в потоке, автор отвечает на ссылки в ссылке, я подумал, что было бы неплохо поставить один из упомянутых обходных решений на SO:
Верно, что это технически не реализовано, но есть легкая работа, если вы хотите немного изменить свою модель данных: используйте настраиваемый фильтр для создания массива свойств объекта (без). Если вы добавите поле ключа к объектам ( "id" в приведенном выше случае), вы сможете получить поведение, которое вы ищете:
app.filter("toArray", function(){
return function(obj) {
var result = [];
angular.forEach(obj, function(val, key) {
result.push(val);
});
return result;
};
});
...
$scope.users = {
1: {name: "John", email: "[email protected]", id: 1},
2: {name: "Elisa", email: "[email protected]", id: 2}
};
Здесь можно указать директиву ng-repeat:
<option value="{{user.id}}" ng-repeat="user in users | toArray | orderBy:'name'">{{user.name}}</option>
И здесь plunkr.
Обратите внимание, что фильтр orderBy
принимает name
как его параметр, а не user.name
.
К сожалению, добавление свойства id
к вашим объектам создает потенциал для несоответствия с ним в содержащем объекте.
В ссылке, упомянутой в вашем ответе, также предлагаются предлагаемые решения, которые создают свойство id
в объектах пользователя "на лету", но я чувствую, что этот подход немного менее беспорядочен (за счет введения данных репликации).