Я учусь использовать этот замечательный angular материальный компонент, которым является таблица данных. Мне удалось заставить его работать в моем индивидуальном приложении, но когда я попытался добавить сортировку и разбиение на страницы, данные исчезли, несмотря на то, что их отслеживали в журналах.
Я делаю что-то не так, может кто-то указать мне в правильном направлении? Соответствующий код:
Базовый компонент, который обрабатывает и получает все данные:
export class BaseComponent implements OnInit {
public tableData: any;
readonly displayedColumns = ['id', 'sol', 'earth_date', 'img_source'];
readonly cameras: string[] = [
'FHAZ',
'RHAZ',
'MAST',
'NAVCAM',
'CHEMCAM',
'MAHLI',
'MARDI',
'PANCAM',
'MINITES',
];
readonly camera = 'FHAZ';
roverData: Rover[];
dataSource = new MatTableDataSource<any>(this.tableData);
constructor(private dataService: DataService) {}
ngOnInit(): void {}
eventCaptured($event) {
this.dataService.searchByCamera($event).subscribe((data) => {
this.roverData = this.tableData = data;
console.log(this.tableData);
});
}
Передача данных через Input (базовый компонент html):
<div class="col-md-6">
<app-content
[roverData]="roverData"
[dataSource]="dataSource"
[displayedColumns]="displayedColumns"
></app-content>
</div>
компонент содержимого, который отображает таблицу (TS)
export class ContentComponent implements OnInit, OnChanges {
@Input() roverData: Rover[];
@Input() dataSource: any;
@Input() displayedColumns: string[];
@ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;
@ViewChild(MatSort, { static: true }) sort: MatSort;
constructor() { }
ngOnInit(): void {
}
ngOnChanges(changes: SimpleChanges){
console.log(changes);
}
}
Content HTML (таблица)
<mat-table matSort [dataSource]="dataSource" class="mat-elevation-z8">
<ng-container matColumnDef="id">
<mat-header-cell *matHeaderCellDef> Id </mat-header-cell>
<mat-cell *matCellDef="let r"> {{r.id}} </mat-cell>
</ng-container>
<ng-container matColumnDef="sol">
<mat-header-cell *matHeaderCellDef> Sol </mat-header-cell>
<mat-cell *matCellDef="let r"> {{r.sol}} </mat-cell>
</ng-container>
<ng-container matColumnDef="earth_date">
<mat-header-cell *matHeaderCellDef> Earth Date </mat-header-cell>
<mat-cell *matCellDef="let r"> {{r.earth_date}} </mat-cell>
</ng-container>
<ng-container matColumnDef="img_source">
<mat-header-cell *matHeaderCellDef> Rover Image </mat-header-cell>
<mat-cell *matCellDef="let r">
<img class="img-fluid" src="{{r.img_src}}" alt="rover camera">
</div>
</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 [pageSizeOptions]="[5, 10, 20]" showFirstLastButtons></mat-paginator>
Хук onChnges отображает правильные данные, но не обрабатывается. Почему?