具有2个条件的Ng网格滤波器

时间:2017-07-04 11:07:41

标签: javascript angularjs angular-ui-grid ng-grid

我要求根据

过滤表格
  1. 单列和
  2. 跨列比较。
  3. 我正在使用ng-grid来填充表格。它提供了基于单列过滤的功能。

    对于跨列比较,我使用的是grid.refresh()函数。此函数调用grid.registerRowsProcessor( $scope.columnComparionFilter, 200 )函数。我准备了基于过滤器返回columnComparionFilter的{​​{1}}函数。以下是示例代码:

    renderableRows

    两种过滤器都可以单独使用。 但是,当我尝试一起工作时。它仅基于默认单过滤器进行过滤。它消除了跨列过滤器。

    任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

实际上grid.registerRowsProcessor()ng-grid的单列过滤器使用的核心功能。因此,当我尝试使用相同的功能进行跨过滤时,它导致同步问题和单列过滤器超过了我的自定义函数。

我使用了替代方法来修改ng-grid数据。我用notifyDataChange()函数解决了它。内部外部过滤器函数columnComparionFilter我正在基于过滤器准备数据子集,然后我将gridOptions.data更改为子集数据。见下面的代码:

// function to filter two column based on condition
$scope.columnComparionFilter= function(renderableRows){
    // if filter option selection changed
    if($scope.change){
        if($scope.column1 == undefined){
            console.log('Please select first column to compare.')
            return;
        }
        if($scope.column2 == undefined){
            console.log('Please select second column to compare.')
            return;
        }
        if($scope.column1 == $scope.column2){
            console.log('columns for comparision should be different.')
            return;
        }
        if($scope.selectedFilter.name == 'compare'){
            renderableRows.forEach( function( row ) {                
                if(row[$scope.column1.field] == row[$scope.column2.field])
                    filterData.push(row)
            });
        }else if($scope.selectedFilter.name == 'distinct'){
            renderableRows.forEach( function( row ) {
                if(row[$scope.column1.field] != row[$scope.column2.field])
                    filterData.push(row)
            });
        }
        $scope.gridOptions.data = angular.copy(filterData);
        $scope.gridApi.core.notifyDataChange(uiGridConstants.dataChange.ALL);
        return;
    }
};