ページング機能を実装する
ページング機能を有効にするには、テンプレート/コントローラー双方の修正が必要となります。
<div ui-grid="myGrid" ui-grid-pagination></div>
angular.module('myApp', [ 'ui.grid', 'ui.grid.pagination' ]) .controller('MyController', ['$scope', 'uiGridConstants', function($scope, uiGridConstants) { $scope.myGrid = { enablePaginationControls: true, paginationPageSize: 5, paginationPageSizes: [3, 5, 7 ], ...中略... }; }]);
ページングを有効にするには、現在のモジュールから(ui.gridに加えて)ui.grid.paginationモジュールへの依存関係を設定した上で、グリッド要素(<div>要素)に対してui-grid-pagination属性を付与します。また、コントローラー側では、以下のようなグローバルパラメーターを設定してください。
パラメーター | 概要 |
---|---|
enablePaginationControls | ページングのためのコントローラー(ページャー)を表示 |
paginationPageSize | デフォルトのページサイズ |
paginationPageSizes | 選択できるページサイズの候補(配列) |
この例であれば、3、5、7件から選択できるページャーを表示します。paginationPageSizeパラメーターには、paginationPageSizesパラメーターにない値を指定してもエラーにはなりませんが、アプリとしては不自然です。まずは、候補内からデフォルト値を選択すべきでしょう。
グリッド表の下部に、以下のようなページャーが表示されること、ページャーでページを移動できることを確認してください。
カスタムのページャーを準備する
ページャーは自前で準備することもできます。たとえば以下は、グリッド表の下部に独自の前後ボタンと、指定ページへの移動ボタンを付与する例です。
<div ui-grid="myGrid" ui-grid-pagination></div> <div>{{api.getPage()}}/{{api.getTotalPages()}}</div> <button type="button" ng-click="api.previousPage()"> 前ページへ</button> <button type="button" ng-click="api.nextPage()"> 次ページへ</button> | <input type="number" ng-model="pagenum" size="3" /> <button type="button" ng-click="api.seek(pagenum)"> 指定されたページへ</button>
angular.module('myApp', [ 'ui.grid', 'ui.grid.pagination' ]) .controller('MyController', ['$scope', 'uiGridConstants', function($scope, uiGridConstants) { $scope.pagenum = 1; $scope.myGrid = { enablePaginationControls: false, paginationPageSize: 5, onRegisterApi: function(gridApi){ $scope.api = gridApi.pagination; }, ...中略... }; }]);
onRegisterApiパラメーターには、グリッド表が初期化されたタイミングで呼び出されるコールバック関数を登録します。引数にUI Grid API(gridApi)が渡されますので、そのpaginationオブジェクトを、あとからテンプレートで利用できるよう、スコープ変数に登録しておきます。paginationオブジェクトは、ページング関連の操作に関わる機能を提供します。
あとは、テンプレート側に配置したボタンからpaginationオブジェクトのメソッドを呼び出すだけです。ここで利用しているのは、以下のメンバーです。
メソッド | 概要 |
---|---|
getPage() | 現在のページ数を取得 |
getTotalPages() | 総ページ数を取得 |
nextPage() | 次のページに移動 |
previousPage() | 前のページに移動 |
seek(page) | 指定されたページ(page)に移動 |
フィルター機能を実装する
フィルター機能を有効にすることで、列単位にキーワード一致(部分一致)したデータのみを検索できます。
angular.module('myApp', [ 'ui.grid']) .controller('MyController', ['$scope', 'uiGridConstants', function($scope, uiGridConstants) { $scope.myGrid = { enableFiltering: true, columnDefs: [ { field: 'cid', displayName: '商品コード', cellClass: 'strong', enableHiding: false }, { field: 'name', displayName: '商品名', filter: { condition: uiGridConstants.filter.STARTS_WITH, placeholder: '前方一致' } }, { field: 'price', displayName: '価格', cellFilter: 'currency : "¥" :0', filters: [ { condition: uiGridConstants.filter.GREATER_THAN_OR_EQUAL, placeholder: '以上' }, { condition: uiGridConstants.filter.LESS_THAN_OR_EQUAL, placeholder: '以下' } ] }, { field: 'from', displayName: '産地' }, { field: 'ship', displayName: '出荷日', cellFilter: 'date: "yyyy年MM月dd日"', enableFiltering: false } ], ...中略... }; }]);
フィルター機能を実装するには、グローバルパラメーターとしてenableFilteringパラメーターをtrueに設定した上で、columnDefs-filterパラメーターから列単位の挙動を設定します。filterパラメーター配下で利用できるパラメーター情報には、以下のようなものがあります。
パラメーター | 概要 |
---|---|
placeholder | テキストボックスに表示する透かし文字 |
term | 初期値 |
condition | 比較条件(設定値は以下の表を参照) |
設定値 | 概要 |
---|---|
CONTAINS | 部分一致 |
EXACT | 完全一致 |
STARTS_WITH | 前方一致 |
ENDS_WITH | 後方一致 |
GREATER_THAN_OR_EQUAL | 以上 |
LESS_THAN_OR_EQUAL | 以下 |
GREATER_THAN | より大きい |
LESS_THAN | 未満 |
NOT_EQUAL | 等しくない |
検索条件を表す定数値は、uiGridConstantsサービスで提供されています。あらかじめコントローラー側で注入しておくのを忘れないようにしてください。
filters(複数形)パラメーターに配列を指定することで、複数の検索ボックスを設置することもできます。この場合、検索条件はand条件となります。