Javascript 具有2个条件的Ng栅极滤波器

Javascript 具有2个条件的Ng栅极滤波器,javascript,angularjs,angular-ui-grid,ng-grid,Javascript,Angularjs,Angular Ui Grid,Ng Grid,我有要求过滤表的基础上 单列和 跨列比较 我使用ng网格填充表。它提供了基于单列的过滤功能 对于跨列比较,我使用的是grid.refresh()函数。此函数调用grid.registerRowsProcessor($scope.columnComparationFilter,200)函数。我已经准备好了columnComparationFilter函数,该函数基于过滤器返回renderableRows。下面是示例代码: // function to filter two column based

我有要求过滤表的基础上

  • 单列和
  • 跨列比较
  • 我使用ng网格填充表。它提供了基于单列的过滤功能

    对于跨列比较,我使用的是
    grid.refresh()
    函数。此函数调用
    grid.registerRowsProcessor($scope.columnComparationFilter,200)
    函数。我已经准备好了
    columnComparationFilter
    函数,该函数基于过滤器返回
    renderableRows
    。下面是示例代码:

    // function to filter two column based on condition
    $scope.columnComparionFilter= function(renderableRows){
        // if filter option selection changed
        if($scope.change){
            if($scope.column1 == undefined)
                return renderableRows;
            if($scope.column2 == undefined)
                return renderableRows;
            if($scope.column1 == $scope.column2){
                console.log('columns for comparision should be different.')
                return renderableRows;
            }
            if($scope.selectedFilter.name == 'compare'){
                renderableRows.forEach( function( row ) {
                    if(row.entity[$scope.column1.field] == row.entity[$scope.column2.field])
                        row.visible = true;
                    else
                        row.visible = false;
                });
            }else if($scope.selectedFilter.name == 'distinct'){
                renderableRows.forEach( function( row ) {
                    if(row.entity[$scope.column1.field] != row.entity[$scope.column2.field])
                        row.visible = true;
                    else
                        row.visible = false;
                });
            }
        }
        return renderableRows;
    };
    
    两个过滤器单独工作都很好。 但当我试着两者一起工作时。默认情况下,它仅基于单个过滤器进行过滤。它消除了跨列过滤器


    有谁能帮我解决这个问题吗?

    实际上
    grid。registerRowsProcessor()
    ng grid
    的单列过滤器使用的核心函数。所以,当我尝试使用相同的函数进行交叉过滤时,它导致了同步问题,而单列过滤器控制了我的自定义函数

    我使用了另一种方法来修改ng网格数据。我使用
    notifyDataChange()
    函数解决了这个问题。内部外部筛选函数
    columnComparationFilter
    我正在根据筛选准备数据子集,然后将
    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;
        }
    };
    

    实际上,
    grid.registerRowsProcessor()
    ng grid
    的单列过滤器使用的核心函数。所以,当我尝试使用相同的函数进行交叉过滤时,它导致了同步问题,而单列过滤器控制了我的自定义函数

    我使用了另一种方法来修改ng网格数据。我使用
    notifyDataChange()
    函数解决了这个问题。内部外部筛选函数
    columnComparationFilter
    我正在根据筛选准备数据子集,然后将
    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;
        }
    };