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;
}
}
}
})
};
答案 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: ''}
}