2014-12-05 23 views
3

我想根据下拉框中的值过滤ngtable。如何过滤和刷新自定义装配器上的ngtable分页

$scope.tableParams = new ngTableParams({ 
    page: 1,   // show first page 
    count: 5,   // count per page 
    sorting: { 
     name: 'asc'  // initial sorting 
    }, 
}, { 
    total: tabledata.length, // length of data 
    getData: function($defer, params) { 
     // use build-in angular filter 
     filteredData = params.filter() ? 
      $filter('filter')(tabledata, params.filter()) : 
      tabledata; 

     var orderedData = params.sorting() ? 
          $filter('orderBy')(filteredData, params.orderBy()) : filteredData; 

     $defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count())); 
    } 
}); 

我已将我的完整代码发布在plunker上:http://plnkr.co/edit/YbCe5Y6qIxN18yHCrzwW?p=preview

发生的问题是页数保持不变,但如果我的一些结果在页面5上,它们将保持在那里。基本上我有空白页面,其中将有过滤结果的页面(没有页面缩小)。

我试图合并我的自定义过滤器 - viewFilter,但我没有成功使它工作。这是另一个掠夺者的例子,其中过滤是基本的(基于列名称)和工作:http://plnkr.co/edit/CbmbXTXukNxC1ZzkJNKO?p=preview

有谁知道广告可以帮助我整合这个自定义过滤器吗?谢谢

+0

也许这将帮助:$ scope.tableParams.reload(); – Dudi 2018-01-30 10:11:58

回答

3

你没有调用表的过滤器,你只是过滤你所在的页面。为了解决你的问题,你应该从viewFilter函数调用ng-table的过滤函数。我对代码做了一些更改,并按预期工作。在控制器中,我更改了viewOptions的值,我在表中包含了一个过滤器,并且我已经从viewFilter调用了过滤器函数。现在,它看起来像:

$scope.viewOptions = [ 
     { 
      name: 'All', 
      value: '' 
     }, 
     { 
      name: 'Approved', 
      value: 'Y' 
     }, 
     { 
      name: 'Declined', 
      value: 'N' 
     } 
    ]; 
$scope.view = { type: '' }; 

    $scope.viewFilter = function (data) { 
     var filter = $scope.view.type; 
     $scope.tableParams.filter(filter, data); 

    }; 

    $scope.tableParams = new ngTableParams({ 
     page: 1,   // show first page 
     count: 10,   // count per page 
     sorting: { 
      name: 'asc'  // initial sorting 
     }, 
     filter:{ 
      flag_approved:'' 
     } 
    }, { 
     total: tabledata.length, // length of data 
     getData: function ($defer, params) { 
      // use build-in angular filter 
      var filteredData = params.filter() ? $filter('filter')(tabledata, params.filter()) : tabledata; 
      var orderedData = params.sorting() ? $filter('orderBy')(filteredData, params.orderBy()) : filteredData; 
      params.total(filteredData.length); 
      $defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count())); 
     } 
    }); 
});                       ` 

块引用

在HTML每次我打电话viewFilter功能,在下拉列表改变,我已经删除表中的过滤器。现在,它看起来像:'

页: {{tableParams.page()}}每页

计数: {{tableParams.count()}}

排序: {{tableParams。分选()| JSON}}

过滤: {{tableParams.filter()| JSON}}

数据: {{tableParams.ordered()| JSON}}

<div class="row"> 
    <div class="col-xs-6 text-left"> 
     <form class="filter-form form-inline" role="form"> 
      <div class="form-group"> 
       <label for="drop-actions">View:</label>&nbsp; 
       <select id="drop-actions" class="form-control" ng-model="view.type" ng-options="opt.value as opt.name for opt in viewOptions" ng-change="viewFilter()"> 
       </select> 
      </div> 
     </form> 
    </div> 
</div> 

<table class="table table-bordered" ng-table="tableParams"> 
    <tr ng-repeat="g in $data"> 
     <td data-title="'Name'" sortable="'name'"> 
      {{ g.name }} 
     </td> 
     <td data-title="'Head2'"> 
      {{ g.flag_approved }} 
     </td> 
    </tr> 
</table> 

0

要解决此问题变化$scope.view.type = '';,而是把$scope.view = { type: '' };