我有一个ng-grid,他的一个列是一个组合列:
angular.forEach($scope.opportunitiesData,function(row){
row.getABDisplayName = function(){
return this.a + ' - ' + this.b;
};
});
$scope.gridOptions = {
data: 'loadGridItems',
headerRowHeight: 0,
multiSelect: false,
showFilter: false,
columnDefs: [{field:'getABDisplayName()',displayName:"Tasks"},
...],
enableSorting: true,
filterOptions: $scope.filterOptions
};
我的问题是过滤器不适用于该字段。 我试图改变它,并将组合字段分解为2个字段,过滤器工作... 不确定有什么区别,因为这两个字段都是字符串。
答案 0 :(得分:2)
我一直在看这个,因为我遇到了同样的问题(只有三个连接字段才能过滤列)。最终我想出了以下内容:
您需要创建自己的过滤器,并完全绕过ng-grid的内置filterOptions。
有些事情:
// pass in your original dataset to filter, and filter text
app.filter('opportunitiesFilter',function(){
return function(array, input){
var match = []; // will hold your newly filtered data
if (input = '') return array; // return orig data if nothing entered
// use foreach to loop through your original array
angular.forEach(array, function(item){
// your filter logic goes here - might be the following:
if (item.indexOf(input) >= 0) match.push(item);
});
return match;
});
在控制器代码中,向搜索文本字段添加监视,并在更改时调用过滤器。您将原始数据数组和搜索字段文本传递给过滤器,并将生成的过滤数组绑定到ng-grid数据参数。请务必在控制器签名中包含$ filter调用。即。函数($ scope,$ http,$ filter,...){}
// watch your input field for changes to filter on, call custom filter, and bind to grid
$scope.watch('searchText'), function(){
$scope.'loadGridItems' = $filter('opportunitiesFilter')($scope.opportunitiesData, $scope.searchText);
}
这对我有用,虽然您可能需要根据需要调整过滤器 - 比如使用.toLowerCase()等来进行不区分大小写的匹配等。
希望这可以帮助你 - 我花了一段时间,但现在我很高兴。
干杯, 丹