Search code examples
angularjsangular-filters

Angular order array of object in reverse


Cant get this to work:

<tr ng-repeat="serv in servicesAdded |orderBy:predicate:reverse">
      <td>{{serv.stepNumber}}</td>...

In my controller :

    $scope.predicate = 'stepNumber';
    $scope.reverse = true;
    $scope.order = function (predicate) {
        $scope.reverse = ($scope.predicate === predicate) ? !$scope.reverse : false;
        $scope.predicate = predicate;
    };

My array of objects looks like this

  $scope.servicesAdded = [{stepNumber:-1,otherData:""},
                          {stepNumber:-2,otherData:""},
                          {stepNumber:1,otherData:""}];

I never comes out in reverse order (-2 first) what am i doing wrong?


Solution

  • Try syntax with '+predicate', '-predicate'

    <tr ng-repeat="serv in servicesAdded |orderBy:usedPredicate">
        <td>{{serv.stepNumber}}</td>...
    

    and Angular code:

    $scope.order = function (predicate) {
            $scope.reverse = ($scope.predicate === predicate) ? !$scope.reverse : false;
            $scope.usedPredicate = $scope.reverse ? '-' : '+' + predicate;
            $scope.predicate = predicate;
        };
    

    An expression can be optionally prefixed with + or - to control ascending or descending sort order (for example, +name or -name). If no property is provided, (e.g. '+') then the array element itself is used to compare where sorting.

    orderBy Angular docs