Как указано в документации , orderBy ожидает array
в качестве ввода, а не объекта.
Таким образом, решение превращает ваш объект в массив.Вы можете сделать это, используя метод reduce
, передав функцию callback как argument
.
$scope.sports = Object.keys($scope.sports).reduce(function(arr,key){
arr.push({id: key, value: $scope.sports[key]})
return arr;
},[]);
Также вы можете использовать метод map
.
$scope.sports = Object.keys($scope.sports).map((key) => ({id: key, value: $scope.sports[key]}));
Теперь вы можете отображать товары, упорядоченные по полю value
.
<li ng-repeat="elem in sports | orderBy:'value'">
<a ng-href='/page/{{elem.id }}'>{{elem.value}}</a> // id: {{id}}
</li>
Рабочий раствор:
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.sports = { 1: "Soccer", 2: "Tennis", 3: "Basketball", 4: "MMA", 5: "Street dance", 6: "Aerobics", 7: "Aerial hoop" };
$scope.sports = Object.keys($scope.sports).map((key) => ({id: key, value: $scope.sports[key]}));
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-controller="myCtrl" ng-app="myApp">
<ul>
<li ng-repeat="elem in sports | orderBy:'value'">
<a ng-href='/page/{{elem.id }}'>{{elem.value}}</a> // id: {{elem.id}}
</li>
</ul>
</div>