Mehrere Matte-Tabelle mit MatSort innerhalb der gleichen Komponente
Ich habe 2 material 2 Tabellen in der gleichen Komponente mit der Sortierung. Ich kann nicht einen Weg finden, weisen Sie die MatSort Richtlinie, um Ihre eigene Tabelle. Ich bin nur in der Lage zu verwenden MatSort in der ersten Tabelle und der zweiten Tabelle nicht erkennt, es ist ein MatSort auf Sie. Weiß jemand, wie konfigurieren Sie zwei Tabellen mit Sortierung in der gleichen Komponente?
Habe ich versucht, die Definition der ViewChild mit unterschiedlichen Namen, aber es hat nicht funktioniert.
@ViewChild('hBSort') hBSort: MatSort;
@ViewChild('sBSort') sBSort: MatSort;
this.hBSource = new HBDataSource(this.hBDatabase, this.hBPaginator,
this.hBSort);
this.sBSource = new SBDataSource(this.sBDatabase, this.sBPaginator,
this.sBSort);
Table 1
const displayDataChanges = [
this.hBPaginator.page,
this.hBSort.sortChange,
this._filterChange
];
Table 2
const displayDataChanges = [
this.sBPaginator.page,
this.sBSort.sortChange,
this._filterChange
];
Table 1
<mat-table #hBtable [dataSource]="hBSource" matSort style="min-width:
740px;">
<ng-container matColumnDef="domain">
<mat-header-cell *matHeaderCellDef mat-sort-header> {{'list.domain' | translate}} </mat-header-cell>
<mat-cell *matCellDef="let row"> {{row.domain}} </mat-cell>
</ng-container>
<ng-container matColumnDef="general">
<mat-header-cell *matHeaderCellDef mat-sort-header> {{'list.general' | translate}} </mat-header-cell>
<mat-cell *matCellDef="let row"> {{row.general.gNum}} ({{row.general.gPct | number: '1.1-2'}}%) </mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="hBColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: hBColumns;"></mat-row>
</mat-table>
Table 2
<mat-table #sBSort [dataSource]="sBSource" matSort style="min-width: 1200px;">
<ng-container matColumnDef="domain">
<mat-header-cell *matHeaderCellDef mat-sort-header> {{'list.domain' | translate}} </mat-header-cell>
<mat-cell *matCellDef="let row"> {{row.domain}} </mat-cell>
</ng-container>
<ng-container matColumnDef="general">
<mat-header-cell *matHeaderCellDef mat-sort-header> {{'list.general' | translate}} </mat-header-cell>
<mat-cell *matCellDef="let row"> {{row.general.gNum}} ({{row.general.gPct | number: '1.1-2'}}%) </mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="sBColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: sBColumns;"></mat-row>
</mat-table>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fix ist, dass nach dem definieren der ViewChild Referenz im DOM brauchen, um stellen Sie sicher, dass Sie das ="matSort" nach.
Schritte:
Eingerichtet MatSort Instanzen der Komponente aus und definieren Sie in Ihrer Datenquelle Abhängigkeiten etwa so:
Definieren ViewChild Referenzen in der DOM-und legen Sie gleich matSort (Hinweis: matSort Attribut ist auf der Matte-table tag):
Edit:
Ich glaube, Sie brauchen:
oben Ihr:
Dann:
Davon aus, dass Ihr HBDataSource und SBDataSource sowohl export MatTableDataSource();
Ich bin auf diese Quellen:
https://material.angular.io/components/sort/overview
https://github.com/angular/material2/blob/master/src/demo-app/table/table-demo.ts
Hier ist eine Eckige 6 funktionierende Lösung:
...
...
Datenquelle 1:
Datenquelle 2:
...
Tabelle 1 (Ansicht):
Tabelle 2 (View):
Im Winkel 7, müssen Sie
both
matSort
und die Referenz#sorter1="matSort"
:Dann
Ich würde empfehlen, auf die Schaffung einer gemeinsamen Komponente für die Tabelle, die verwendet werden können, an mehreren stellen in der Anwendung. Als Komponente erstellt die separate Instanz, Matte Tisch hat keine Konflikte gibt-Funktionalität.
In diesem Fall brauchen Sie nicht zu wiederholen Sie den code für die 2 Tabellen. Unten ist Tisch, gemeinsame Komponente, die Sie implementieren können.
Hause.Komponente.ts
Home.component.html
Tabelle.Komponente.ts
Table.component.html