Jay
Jay

Reputation: 3393

Angular JS orderBy not working using dropdown

i am trying to do orderBy using dropdown value, but its not working :(

CODE:

var app = angular.module('myApp', []);
app.controller('myCtrl', function ($scope) {
    $scope.datas = [{
        "id": "1",
            "name": "name area 1"
    }, {
        "id": "2",
            "name": "name area 2"
    }, {
        "id": "3",
            "name": "name area 3"
    }, {
        "id": "4",
            "name": "name area 4"
    }];
    $scope.dropdown = [{
        "title": "Newest first",
            "value": "true"
    }, {
        "title": "Oldest first",
            "value": "reverse"
    }];
});

HTML:

    <div ng-app="myApp">
      <div ng-controller="myCtrl">
          <ul ng-repeat="rows in datas | orderBy: 'id':orderByData">
              <li>{{rows.id}} : {{rows.name}}</li>
          </ul>
          <select ng-model="orderByData" ng-options="x.value as x.title for x in dropdown"></select>
      </div>
    </div>

DEOM JS BIN

Upvotes: 2

Views: 781

Answers (2)

krzysiek.ste
krzysiek.ste

Reputation: 2276

Why you use reverse? Please use false instead reverse and it should work fine.

$scope.dropdown = [{
        "title": "Newest first",
            "value": "true"
    }, {
        "title": "Oldest first",
            "value": "false"
    }];

Upvotes: 2

dfsq
dfsq

Reputation: 193261

You don't need reverse parameter here. Instead you can do something like this:

<ul ng-repeat="rows in datas | orderBy: getSort()">
    <li>{{rows.id}} : {{rows.name}}</li>
</ul>

Where getSort is defined as:

$scope.getSort = function() {
    return $scope.orderByData ? 'id' : '-id';
};

Basically you want sort part to look like orderBy: 'id' or orderBy: '-id'.

Demo: http://jsbin.com/pepureta/1/edit?html,js,output

Upvotes: 1

Related Questions