Rumah > hujung hadapan web > tutorial js > Menambah berbilang MatPaginator pada DataSource yang sama

Menambah berbilang MatPaginator pada DataSource yang sama

Patricia Arquette
Lepaskan: 2025-01-23 06:30:14
asal
591 orang telah melayarinya

Adding multiple MatPaginators to the same DataSource

Panduan ringkas ini membantu pembangun Angular menggunakan perpustakaan Bahan Sudut. Pelanggan meminta ciri khusus: Memaparkan (Mat)Paginator di atas dan di bawah semua MatTable.

Cabarannya: MatPaginator hanya boleh dipautkan kepada satu Sumber Data.

Percubaan awal melibatkan penggunaan templat untuk memaparkan penomboran dua kali, tetapi ini terbukti tidak berjaya; penomboran kedua kekal tidak berfungsi. Melaksanakan logik penomboran tersuai, serupa dengan penomboran sebelah pelayan, telah dipertimbangkan tetapi dianggap tidak praktikal disebabkan oleh pengubahsuaian meluas yang diperlukan merentas berbilang halaman. Percubaan dengan isyarat untuk menyegerakkan penomboran kedua juga gagal. Penyelesaian yang dibentangkan di bawah menawarkan pendekatan yang lebih mudah.

Pelaksanaan

Templat:

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

Komponen:

<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>
Salin selepas log masuk

Penjelasan

MatTable dan MatPaginator utama dilaksanakan sebagai standard. Sambungan diwujudkan dalam cangkuk ngAfterViewInit().

Memandangkan penomboran kedua tidak dikemas kini secara automatik, sifatnya diperoleh daripada penomboran pertama, yang menguruskan data jadual. Kaedah pageChanged() mengendalikan acara penomboran dari penomboran bawah, mengemas kini penomboran pertama dan dataSource dengan sewajarnya. Perhatikan penggunaan pengendali penegasan bukan nol (!) yang menganggap dataSource.paginator akan tersedia selepas ngAfterViewInit. Pertimbangkan untuk menambah pengendalian ralat untuk kod pengeluaran. Selain itu, gantikan any dengan jenis tertentu untuk keselamatan jenis yang lebih baik.

Atas ialah kandungan terperinci Menambah berbilang MatPaginator pada DataSource yang sama. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan