Jack
Jack

Reputation: 526

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?

Upvotes: 0

Views: 903

Answers (1)

Keammoort
Keammoort

Reputation: 3075

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

Upvotes: 1

Related Questions