You cannot use orderBy
filter over an object. It only works over an array. So basically you have two options:
1. Order your object by key inside the controller and iterate over that sorted object (PLUNKER)
CONTROLLLER
var objectUnsorted = {
"key2":{"id":2,"name":"Lisa","date":"11/11/2016"},
"key3":{"id":3,"name":"Alice","date":"06/03/2017"},
"key1": {"id":1,"name":"Christina","date":"17/05/2016"}
};
vm.sortedObject = orderByKey(objectUnsorted);
function orderByKey(data){
let ordered = {};
Object.keys(data).sort().forEach(function(key) {
ordered[key] = data[key];
});
return ordered;
}
HTML
<tr ng-repeat="(key, value) in vm.soretdObject">
2. Convert your object to an array and user orderBy
filter (PLUNKER)
CONTROLLER
var objectUnsorted = {
"key2": {"id":2,"name":"Lisa","date":"11/11/2016"},
"key3": {"id":3,"name":"Alice","date":"06/03/2017"},
"key1": {"id":1,"name":"Christina","date":"17/05/2016"}
};
vm.dataArray = Object.keys(objectUnsorted).map(function (key) {
var obj = objectUnsorted[key];
obj.key = key;
return obj;
});
HTML
<tr ng-repeat="data in vm.dataArray | orderBy:'key'">
** A third option could be do it with a
filter (
CHECK THIS ANSWER). But I don't believe that is a good approach convert to array in every digest cycle with a filter.