Я новичок в Angular и angular материалах. Я не могу привязать и отобразить свои данные из http-сервиса в таблице. когда я консолью данные, я получаю их после загрузки страницы. иногда я получаю ошибку undefined. Пожалуйста, найдите мой код ниже, когда я его использую.
export class OrdersDetailsComponent implements AfterViewInit, OnInit {
@ViewChild(MatPaginator, { static: false }) paginator: MatPaginator;
@ViewChild(MatSort, { static: false }) sort: MatSort;
@ViewChild(MatTable, { static: false }) table: MatTable<OrdersDetailsItem>;
dataSource: OrdersDetailsDataSource;
/** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */
displayedColumns = ['OrderId', 'OrderNumber'];
constructor(
private apiService: OrdersDetailsService
) { }
ngOnInit() {
this.dataSource = new OrdersDetailsDataSource();
this.getAllOrders()
this.dataSource.sort = this.sort;
this.dataSource.paginator = this.paginator;
}
getAllOrders() {
this.apiService.getOrders().subscribe((data: any) => {
this.dataSource.data = data
console.log(data)
return data
})
}
ngAfterViewInit() {
this.table.dataSource = this.dataSource;
}
}
мой API
getOrders() {
return this.http.get(environment.apiUrl + 'admin/getAllOrders')
}
мой HTML
<div class="mat-elevation-z8">
<table mat-table #table [dataSource]="dataSource" class="full-width-table" matSort aria-label="Elements">
<!-- Id Column -->
<ng-container matColumnDef="OrderId">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Id</th>
<td mat-cell *matCellDef="let row">{{row.OrderId}}</td>
</ng-container>
<!-- Name Column -->
<ng-container matColumnDef="OrderNumber">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Order number</th>
<td mat-cell *matCellDef="let row">{{row.OrderNumber}}</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
<mat-paginator #paginator [length]="dataSource?.data.length" [pageIndex]="0" [pageSize]="50"
[pageSizeOptions]="[25, 50, 100, 250]">
</mat-paginator>
</div>