如何在运行时更改过滤器,然后将其应用于ui-grid?

时间:2015-12-08 16:09:01

标签: angularjs angular-ui-grid

http://plnkr.co/edit/NO41Kp8ps03WPNPkSBdR?p=preview

我的目标是为我的用户提供预先构建的过滤器,他可以使用这些过滤器来运行报告"在网格上。其中一个报告是获取存在于$ scope中的数组中存在的cellValue的每一行。

我可以通过console.log()告诉过滤器正在我的ui-grid上正常运行,但我无法弄清楚如何使网格通过过滤器运行行。我在过滤器上有noTerm = true并尝试了各种gridApi调用,但无济于事。

有什么建议吗?

$scope.toggleFiltering = function() {
    angular.forEach($scope.gridOptions.columnDefs, function(_col){
      if(_col.field == 'company')
      {
          _col.filter = {
            noTerm: true,
            condition: function(searchTerm, cellValue){
              return $scope.valuesForPhone.indexOf(cellValue) > -1;
            }
          }
      }
    })
};

2 个答案:

答案 0 :(得分:0)

如果您只是想切换过滤器,我建议您使用this tutorial中显示的方式,按下按钮切换过滤器。

切换过滤器的代码是:

$scope.toggleFiltering = function(){
  $scope.gridOptions.enableFiltering = !$scope.gridOptions.enableFiltering;
  $scope.gridApi.core.notifyDataChange( uiGridConstants.dataChange.COLUMN );
};

如您所见,可以选择启用/禁用可以通过编程方式更新的过滤器,然后通过调用notifyDataChange来更新网格。

如果切换过滤器以外的其他过滤器需要自定义过滤器,则可以通过实例化rowProcessor来获取它,如此other tutorial中所示。

主要代码是:

$scope.gridApi.grid.registerRowsProcessor( $scope.singleFilter, 200 );

其中$ scope.singleFilter可以是接受行数组的泛型函数,遍历行,更新其visible属性并返回整个数组,如the docs中所示。

答案 1 :(得分:0)

我发现需要在列定义中定义一个空列定义,以便应用程序化过滤器,例如:

{
    field : 'my_field',
    filter: {term: ''}
}