Фильтр Ng-grid с условием 2

У меня есть требование фильтровать таблицу на основе

  1. один столбец и
  2. сравнение столбцов.

Я использую ng-grid для заполнения таблицы. Это дает возможность фильтровать на основе одного столбца.

Для сравнения столбцов я использую функцию grid.refresh(). эта функция вызывает grid.registerRowsProcessor( $scope.columnComparionFilter, 200 )function. Я подготовил функцию columnComparionFilter, которая возвращает 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;
};

Оба фильтра работают нормально по отдельности. Но когда я пытаюсь работать вместе. Он фильтрует только на основе одного фильтра по умолчанию. Это устраняет фильтр через колонку.

Может ли кто-нибудь помочь мне решить эту проблему?


person avni hirpara    schedule 04.07.2017    source источник


Ответы (1)


На самом деле 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;
    }
};
person avni hirpara    schedule 06.07.2017