Heim Web-Frontend js-Tutorial Hinzufügen mehrerer MatPaginators zur gleichen DataSource

Hinzufügen mehrerer MatPaginators zur gleichen DataSource

Jan 23, 2025 am 06:30 AM

Adding multiple MatPaginators to the same DataSource

Dieser prägnante Leitfaden unterstützt Angular-Entwickler bei der Nutzung der Angular-Materialbibliothek. Ein Kunde hat eine bestimmte Funktion angefordert: Anzeige eines (Mat)Paginators sowohl über als auch unter allen MatTables.

Die Herausforderung: Ein MatPaginator kann nur mit einer einzigen DataSource verknüpft werden.

Anfängliche Versuche umfassten die Verwendung von Vorlagen, um den Paginator zweimal darzustellen, aber dies erwies sich als erfolglos; der zweite Paginator blieb funktionsunfähig. Die Implementierung einer benutzerdefinierten Paginierungslogik, ähnlich der serverseitigen Paginierung, wurde in Betracht gezogen, aber aufgrund der umfangreichen Änderungen, die über mehrere Seiten hinweg erforderlich waren, als unpraktisch erachtet. Experimente mit Signalen zur Synchronisierung des zweiten Paginators scheiterten ebenfalls. Die unten vorgestellte Lösung bietet einen einfacheren Ansatz.

Umsetzung

Vorlage:

<mat-paginator [pageSize]="50"></mat-paginator>
<table mat-table>...</table>
<mat-paginator (page)="pageChanged($event)"></mat-paginator>
Nach dem Login kopieren

Komponente:

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);
  }
}
Nach dem Login kopieren

Erklärung

Der primäre MatTable und MatPaginator sind standardmäßig implementiert. Die Verbindung wird innerhalb des ngAfterViewInit() Hooks.

hergestellt

Da der zweite Paginator nicht automatisch aktualisiert wird, werden seine Eigenschaften vom ersten Paginator abgeleitet, der die Tabellendaten verwaltet. Die pageChanged()-Methode verarbeitet Paginierungsereignisse vom unteren Paginator und aktualisiert den ersten Paginator und den dataSource entsprechend. Beachten Sie die Verwendung des Nicht-Null-Behauptungsoperators (!), der davon ausgeht, dass dataSource.paginator nach ngAfterViewInit verfügbar sein wird. Erwägen Sie das Hinzufügen einer Fehlerbehandlung für Produktionscode. Ersetzen Sie außerdem any durch einen bestimmten Typ, um die Typsicherheit zu erhöhen.

Das obige ist der detaillierte Inhalt vonHinzufügen mehrerer MatPaginators zur gleichen DataSource. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ersetzen Sie Stringzeichen in JavaScript Ersetzen Sie Stringzeichen in JavaScript Mar 11, 2025 am 12:07 AM

Ersetzen Sie Stringzeichen in JavaScript

Benutzerdefinierte Google -Search -API -Setup -Tutorial Benutzerdefinierte Google -Search -API -Setup -Tutorial Mar 04, 2025 am 01:06 AM

Benutzerdefinierte Google -Search -API -Setup -Tutorial

Beispielfarben JSON -Datei Beispielfarben JSON -Datei Mar 03, 2025 am 12:35 AM

Beispielfarben JSON -Datei

8 atemberaubende JQuery -Seiten -Layout -Plugins 8 atemberaubende JQuery -Seiten -Layout -Plugins Mar 06, 2025 am 12:48 AM

8 atemberaubende JQuery -Seiten -Layout -Plugins

10 JQuery Syntax Highlighters 10 JQuery Syntax Highlighters Mar 02, 2025 am 12:32 AM

10 JQuery Syntax Highlighters

Erstellen Sie Ihre eigenen AJAX -Webanwendungen Erstellen Sie Ihre eigenen AJAX -Webanwendungen Mar 09, 2025 am 12:11 AM

Erstellen Sie Ihre eigenen AJAX -Webanwendungen

Was ist ' this ' in JavaScript? Was ist ' this ' in JavaScript? Mar 04, 2025 am 01:15 AM

Was ist ' this ' in JavaScript?

10 JavaScript & JQuery MVC -Tutorials 10 JavaScript & JQuery MVC -Tutorials Mar 02, 2025 am 01:16 AM

10 JavaScript & JQuery MVC -Tutorials

See all articles