はじめに
ページングは、多くのデータを扱う際に非常に重要な機能です。ユーザーが効率よくデータを閲覧できるように、データを複数のページに分割して表示します。この記事では、Angular MaterialのMatPaginatorを使用して、データのページング機能を実装する方法について解説します。
Angularのバージョンは18で解説します。
ページングの実装
コンポーネントの作成
import { Component, OnInit } from '@angular/core';
import { MatPaginatorModule, PageEvent } from '@angular/material/paginator';
@Component({
selector: 'app-page',
standalone: true,
imports: [MatPaginatorModule],
templateUrl: './page.component.html',
styleUrl: './page.component.scss'
})
export class PageComponent implements OnInit {
totalItems = 100;
pageSize = 10;
pageSizeOptions: number[] = [5, 10, 25, 100];
pageIndex = 0;
displayedData: any[] = [];
data = Array.from({ length: 100 }, (_, i) => `Item ${i + 1}`);
ngOnInit() {
this.updateDisplayedData();
}
onPageChange(event: PageEvent) {
this.pageSize = event.pageSize;
this.pageIndex = event.pageIndex;
this.updateDisplayedData();
}
updateDisplayedData() {
const startIndex = this.pageIndex * this.pageSize;
const endIndex = startIndex + this.pageSize;
this.displayedData = this.data.slice(startIndex, endIndex);
}
}
このコンポーネントでは、MatPaginatorを使用してデータをページング表示しています。データは、数値が入った100件のサンプルデータを作成し、それをページサイズごとに分割して表示しています。
onPageChangeメソッドでは、ページ番号やページサイズを切り替えて、それに合わせてデータも更新しています。
updateDisplayedDataメソッドでは、設定されているページに該当するデータに更新しています。
HTMLの作成
<div>
<ul>
@for (item of displayedData; track item.id) {
<li>{{ item }}</li>
}
</ul>
<mat-paginator
[length]="totalItems"
[pageSize]="pageSize"
[pageSizeOptions]="pageSizeOptions"
(page)="onPageChange($event)">
</mat-paginator>
</div>
for文とMatPaginatorを使って、表示部分を作っています。
MatPaginatorのオプションは以下の通りです。
- length:項目の総数
- pageSize:1ページに表示するサイズ
- pageSizeOptions:ユーザーに表示するページサイズの選択項目
- page:ページサイズやページインデックスを変更したときに発行されるイベント
実行結果
ページング処理が動くことが確認できました。
APIデータとの連携
今回はデータをコンポーネントで作成していましたが、APIなどでデータを取得するときに、大量のデータから、ページ単位で取得したいというとき使えます。
まとめ
Angular MaterialのMatPaginatorを使ったページング機能はデータが多い場合やAPI連携する場合には非常に便利です。この記事では基本的なページングの実装方法を紹介しましたが、さらなるカスタマイズや複雑なページングロジックにも柔軟に対応可能です。