Improve this Doc

Error: orderBy:notarray
Value is not array-like

Expected array but received: {0}

Description

This error occurs when orderBy is not passed an array-like value:

<div ng-repeat="(key, value) in myObj | orderBy:someProp">
  {{ key }} : {{ value }}
</div>

orderBy must be used with an array-like value so a subset of items can be returned. The array can be initialized asynchronously and therefore null or undefined won't throw this error.

To use orderBy to order the properties of an object, you can create your own array based on that object:

angular.module('aModule', [])
.controller('aController', function($scope) {
  var myObj = {
    one: {id: 1, name: 'Some thing'},
    two: {id: 2, name: 'Another thing'},
    three: {id: 3, name: 'A third thing'}
  };

  $scope.arrFromMyObj = Object.keys(myObj).map(function(key) {
    return myObj[key];
  });
});

That can be used as:

<label>
  Order by:
  <select ng-model="orderProp" ng-options="prop for prop in ['id', 'name']"></select>
</label>
<div ng-repeat="item in arrFromMyObj | orderBy:orderProp">
  [{{ item.id }}] {{ item.name }}
</div>

You could as well convert the object to an array using a filter such as toArrayFilter:

<label>
  Order by:
  <select ng-model="orderProp" ng-options="prop for prop in ['id', 'name']"></select>
</label>
<div ng-repeat="item in myObj | toArray:false | orderBy:orderProp">
  [{{ item.id }}] {{ item.name }}
</div>