Custom filter with AngularJS ngTable Custom filter with AngularJS ngTable angularjs angularjs

Custom filter with AngularJS ngTable


You don't need the watches nor the custom filters you created. Actually angular's 'filter' filter is quite powerful.

You just need to create an object that keeps track of your filter values with members that match your items fields. Something like this.

$scope.filter = {    key: undefined,    failed: undefined}

then you can take it back inside the getData callback using params.filter().I have updated your plunker here. You can also check the sample below:

var app = angular.module('main', ['ngTable']);app.controller('MainCtrl', function($scope, $http, $filter, ngTableParams) {    $scope.completedQueries = [{"key":"abc000","lastRun":123,"lastSuccessfulTime":9999,"elapsedTime":456,"rows":10,"failed":false},{"key":"abc001","lastRun":1234,"lastSuccessfulTime":9999,"elapsedTime":456,"rows":10,"failed":false},{"key":"abc002","lastRun":111111111,"lastSuccessfulTime":9999,"elapsedTime":456,"rows":10,"failed":true},{"key":"abc003","lastRun":123,"lastSuccessfulTime":9999,"elapsedTime":456,"rows":10,"failed":false},{"key":"abc004","lastRun":1234,"lastSuccessfulTime":9999,"elapsedTime":456,"rows":10,"failed":true},{"key":"abc005","lastRun":111111111,"lastSuccessfulTime":9999,"elapsedTime":456,"rows":10,"failed":false},{"key":"abc006","lastRun":123,"lastSuccessfulTime":9999,"elapsedTime":456,"rows":10,"failed":false},{"key":"abc007","lastRun":1234,"lastSuccessfulTime":9999,"elapsedTime":456,"rows":10,"failed":false},{"key":"abc008","lastRun":111111111,"lastSuccessfulTime":9999,"elapsedTime":456,"rows":10,"failed":false},{"key":"abc009","lastRun":123,"lastSuccessfulTime":9999,"elapsedTime":456,"rows":10,"failed":false},{"key":"abc010","lastRun":1234,"lastSuccessfulTime":9999,"elapsedTime":456,"rows":10,"failed":false},{"key":"abc011","lastRun":111111111,"lastSuccessfulTime":9999,"elapsedTime":456,"rows":10,"failed":false},{"key":"abc012","lastRun":123,"lastSuccessfulTime":9999,"elapsedTime":456,"rows":10,"failed":true},{"key":"abc013","lastRun":1234,"lastSuccessfulTime":9999,"elapsedTime":456,"rows":10,"failed":false},{"key":"abc014","lastRun":111111111,"lastSuccessfulTime":9999,"elapsedTime":456,"rows":10,"failed":false},{"key":"abc015","lastRun":123,"lastSuccessfulTime":9999,"elapsedTime":456,"rows":10,"failed":true},{"key":"abc016","lastRun":1234,"lastSuccessfulTime":9999,"elapsedTime":456,"rows":10,"failed":false},{"key":"abc017","lastRun":111111111,"lastSuccessfulTime":9999,"elapsedTime":456,"rows":10,"failed":false}];    $scope.filter = {        key: undefined,        failed: undefined    };    $scope.tableParams =  new ngTableParams({        page: 1,        count: 10,        filter: $scope.filter    }, {        debugMode: true,        total: $scope.completedQueries.length,        getData: function($defer, params) {            var orderedData = params.sorting() ? $filter('orderBy')($scope.completedQueries, params.orderBy()) : data;            orderedData	= $filter('filter')(orderedData, params.filter());            params.total(orderedData.length);            $defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));        }    });});
<link href="https://cdnjs.cloudflare.com/ajax/libs/ng-table/0.3.3/ng-table.min.css" rel="stylesheet"/><link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet"/><script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/ng-table/0.3.3/ng-table.min.js"></script><div  ng-app="main"  ng-controller="MainCtrl">  <label for="keysFilter">Filter Keys:</label>  <input id="keysFilter" type="text" ng-model="filter.key"/>  <label for="showOnlyFailed">Show only queries that failed?</label>  <input id="showOnlyFailed" type="checkbox" ng-model="filter.failed"/>  <br/>  <table ng-table="tableParams" class="table">    <tr ng-repeat="queryInfo in $data">        <td data-title="'Key'" sortable="'key'">{{queryInfo.key}}</td>        <td data-title="'Last Run'" sortable="'lastRun'">{{queryInfo.lastRun}}</td>        <td data-title="'Last Successful Run'" sortable="'lastSuccessfulRun'">{{queryInfo.lastSuccessfulRun}}</td>        <td data-title="'Elapsed Time'" sortable="'elapsedTime'">{{queryInfo.elapsedTime}} ms</td>        <td data-title="'Rows'" sortable="'rows'">{{queryInfo.rows}}</td>        <td data-title="'Failed'" sortable="'failed'">{{queryInfo.failed}}</td>        <td data-title="''"><button class="btn">Detail</button></td>    </tr>  </table> <div>