У меня есть Angular Material Table с данными из базы данных Firebase, которая заполняется, как и ожидалось, однако, когда я пытаюсь следовать документам, чтобы добавить paginator и сортировать, они оба видимы (я вижу div и параметры paginator и анимированную сортировку при нажатии на заголовок), но не работает, т.е. сортирует или изменяет просмотренные элементы. Любые указатели на то, где я иду не так, будут оценены.
Фрагмент HTML:
<mat-table #table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="name">
<mat-header-cell *matHeaderCellDef mat-sort-header> Name </mat-header-cell>
<mat-cell *matCellDef="let item">{{item.name}} </mat-cell>
</ng-container>
...
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
</mat-table>
<mat-paginator
#paginator
[pageSize]="10"
[pageSizeOptions]="[5, 10, 20]"
[showFirstLastButtons]="true"
>
</mat-paginator>
TS:
import { MatTableDataSource, MatSort, MatPaginator } from '@angular/material';
...
itemList: Item[];
displayedColumns = ['name', 'quantity', 'description', 'equippable', 'attunement', 'edit', 'delete'];
dataSource = new MatTableDataSource(this.itemList);
...
@ViewChild(MatSort) sort: MatSort;
@ViewChild(MatPaginator) paginator: MatPaginator;
...
ngOnInit() {
this.dataSource.sort = this.sort;
this.dataSource.paginator = this.paginator;
let data = this.itemService.getData();
data.snapshotChanges().subscribe(item => {
this.itemList = [];
item.forEach(element => {
let json = element.payload.toJSON();
json["$key"] = element.key;
this.itemList.push(json as Item);
});
this.dataSource = new MatTableDataSource(this.itemList);
});
}