ホームページ >ウェブフロントエンド >jsチュートリアル >複数の MatPaginator を同じ DataSource に追加する

複数の MatPaginator を同じ DataSource に追加する

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-23 06:30:14556ブラウズ

Adding multiple MatPaginators to the same DataSource

この簡潔なガイドは、Angular マテリアル ライブラリを利用する Angular 開発者を支援します。クライアントが特定の機能をリクエストしました: すべての MatTable の上と下の両方に (Mat)Paginator を表示します。

課題: MatPaginator は単一の DataSource にしかリンクできません。

最初の試みでは、テンプレートを使用してページネーターを 2 回レンダリングすることが含まれていましたが、これは失敗したことが判明しました。 2 番目のページネーターは機能しないままでした。 サーバー側のページネーションと同様のカスタム ページネーション ロジックの実装が検討されましたが、複数のページにわたって広範な変更が必要となるため、実用的ではないと判断されました。 2 番目のページネーターを同期する信号の実験も失敗しました。 以下に示すソリューションは、より単純なアプローチを提供します。

実装

テンプレート:

<code class="language-html"><mat-paginator [pageSize]="50"></mat-paginator>
<table mat-table>...</table>
<mat-paginator (page)="pageChanged($event)"></mat-paginator></code>

コンポーネント:

<code class="language-typescript">import { Component, AfterViewInit, ViewChild, Input } from '@angular/core';
import { MatPaginator, PageEvent } from '@angular/material/paginator';
import { MatTableDataSource } from '@angular/material/table';
import { effect } from '@angular/core';


@Component(/* ... */)
export class DocumentListComponent implements AfterViewInit {
  @Input() documents!: any[]; // input of the data;  Use a more specific type if possible.

  dataSource = new MatTableDataSource<any>(); // dataSource of the table; Use a more specific type if possible.

  @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator;

  constructor() {
    effect(() => this.dataSource.data = this.documents);
  }

  ngAfterViewInit(): void {
    this.dataSource.paginator = this.paginator;
  }

  pageChanged(event: PageEvent): void {
    this.dataSource.paginator!.pageIndex = event.pageIndex;
    this.dataSource.paginator!._changePageSize(event.pageSize);
  }
}</code>

説明

プライマリ MatTable と MatPaginator は標準として実装されています。 接続は ngAfterViewInit() フック内で確立されます。

2 番目のページネーターは自動的に更新されないため、そのプロパティはテーブル データを管理する最初のページネーターから派生します。 pageChanged() メソッドは、下部のページネーターからのページネーション イベントを処理し、それに応じて最初のページネーターと dataSource を更新します。 !dataSource.paginator の後に使用可能であることを前提とした非 null アサーション演算子 (ngAfterViewInit) の使用に注意してください。 製品コードにエラー処理を追加することを検討してください。 また、型の安全性を高めるために、any を特定の型に置き換えます。

以上が複数の MatPaginator を同じ DataSource に追加するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。