如何过滤我的组合列? (NG-网格)

时间:2014-03-02 09:56:25

标签: angularjs filtering ng-grid

我有一个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个字段,过滤器工作... 不确定有什么区别,因为这两个字段都是字符串。

1 个答案:

答案 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()等来进行不区分大小写的匹配等。

希望这可以帮助你 - 我花了一段时间,但现在我很高兴。

干杯, 丹