2015-04-28 77 views
1

我对Angular和ui-grid都很陌生,但我将它用于一个项目,对此我印象深刻。我有一个关于是否存在给定功能的问题。我使用“enableFiltering”gridOption打开了行筛选,过滤效果很好。因为我有很多列,并没有一次显示,我希望能够在网格上方显示一个头,显示当前有效的所有过滤器的字符串版本。我相信这将需要像监听事件时更改过滤器设置(然后一些API来获取当前过滤器状态)?但环顾四周,我没有看到任何似乎与行过滤相对应的事件(通过比较,我确实看到行选择的事件)。ui-grid enableFiltering events

我是否错过了这种功能的钩子?如果是这样,请问有人能指出我的大方向吗?或者是目前在ui-grid中不存在的功能(我怀疑是这种情况)。

感谢您的任何援助

+0

我想推荐你检查Tubular Grids(https://github.com/unosquare/tubular),你可以直接访问网格范围中的列过滤器。 –

回答

1

我不相信目前还有时,将触发过滤器已经改变的事件,但你不应该需要一个。

作为一个例子,您可以将网格列插入控制器的作用域,并用ng-repeats显示其过滤器列的列表。

这里是你如何使用onRegisterApi得到电网进入你的范围:

$scope.gridOptions = { 
    enableFiltering: true, 
    columnDefs: [ 
    { name: 'name' }, 
    { name: 'amount', cellFilter: 'fractionFilter' } 
    ], 
    onRegisterApi: function (api) { 
    $scope.grid = api.grid; 
    } 
}; 

然后,你interate在你的栏目,筛选那些具有过滤器与填充方面,内列迭代通过它的过滤器。

<span ng-repeat="col in grid.columns | hasFilterTerm"> 
    <strong ng-if="$first"><i>Filters:</i></strong> 

    <strong>{{ col.name }}:</strong> 
    <span ng-repeat="f in col.filters"> 
    {{ f.term }} <span ng-if="!$last">,</span> 
    </span><span ng-if="!$last">;</span> 
</span> 

你“列有有源滤波器术语”过滤器可以是这样的:

app.filter('hasFilterTerm', function() { 
    return function (columns) { 
    var cols = []; 
    columns.forEach(function (c) { 
     c.filters.forEach(function (f) { 
     if (f.term) { 
      cols.push(c); 
     } 
     }); 
    }); 
    return cols; 
    } 
}); 

这里只是显示在网格下面有源滤波器的名单演示plunker:http://plnkr.co/edit/rpLcY3JztGjXOu2QMmEU?p=preview插入即进入自定义标题应该是直截了当的。您不需要将网格暴露给您的控制器范围,并且可以直接在grid.columns上迭代。

+0

这是一个完美的答案。你已经充分证明我还没有学会以足够的角度来思考。谢谢! –