2015-04-28 40 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

這是一個完美的答案。你已經充分證明我還沒有學會以足夠的角度來思考。謝謝! –