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
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;
}
};