javascript - 更改数据源后角度材料排序标题不起作用
问题描述
我无法弄清楚为什么在单击按钮时更改数据源后行过滤不起作用。逻辑是这样构建的,点击按钮后,我们会收到来自 api 的响应,并将 dataSource 设置为该响应。但没有任何效果。
这是我的表格模板代码:
<table mat-table [dataSource]="dataSource1" matSort class="table table-bordered" [ngClass]="issetPerformer || !wasSearchingPerformer ? 'table-hover' : null" *ngIf="issetPerformer || !wasSearchingPerformer" #matTable>
<ng-container matColumnDef="dateF" class="table-head">
<th mat-header-cell *matHeaderCellDef mat-sort-header (click)="consoleLog($event)">Дата</th>
<td mat-cell *matCellDef="let element"> {{element.date }} </td>
</ng-container>
<ng-container matColumnDef="costF" class="table-head">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Сума</th>
<td mat-cell *matCellDef="let element; let i = index"> {{paymentsPerformer[i].cost}} </td>
</ng-container>
<ng-container matColumnDef="detailsF" class="table-head">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Примітки</th>
<td mat-cell *matCellDef="let element"> {{element.details}} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumnss"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumnss;"></tr>
</table>
在课程开始时,我创建了所需的变量:
@ViewChild(MatSort) sort: MatSort;
paymentsPerformer: paymentsPerformer[] = [];
dataSource1 = new MatTableDataSource(this.paymentsPerformer);
displayedColumnss: string[] = ['dateF', 'costF', 'detailsF'];
这是类型的paymentsPerformer:
interface paymentsPerformer {
date: string;
cost: number;
details: string;
}
所以,点击按钮后,我从api获取json并将其设置为paymentsPerformer变量:
showPaymentsPerformer() {
this.api.showPerformerPaymentAdd(this.response.order.orderId + '_1').subscribe((data) => {
console.log(data);
this.wasSearchingPerformer = true;
this.responsiveBodyPerformer = data.length >= 5;
this.paymentsPerformer = data.map(i => {
return {details: i.performerPaymentAddComment || ' ', cost: Number(i.performerPaymentAddSum), date: i.performerPaymentAddDate}
});
this.issetPerformer = true;
this.wasSearchingPerformer = true;
}, error => {
console.log(error);
this.wasSearchingPerformer = true;
this.paymentsPerformer = [];
this.issetPerformer = false;
}, () => {
console.log('array', this.paymentsPerformer)
this.dataSource1 = new MatTableDataSource(this.paymentsPerformer);
this.dataSource1.sort = this.sort;
console.log('this.dataSource1', this.dataSource1);
});
}
函数开始时发生的事情无关紧要,在函数结束时(完成时)我设置所有数据并尝试再次排序。但不工作。
请帮我解决这个问题。谢谢。
解决方案
推荐阅读
- f# - F# Idiomatic Index 打印索引时加一
- ios - 在 Apple 的 Foundation/Swift/Objective-C 中,runLoop.run 如何阻塞,但仍允许 DispatchWorkItems 处理?
- python - 启动 Jupyter Notebook 时 Python 3 失败错误
- css - 如何在 React scss 模块中使用 scss @use
- typescript - 如何在 Typescript 中将空接口指定为通用参数?
- parsing - LR 解析如何选择合格的语法产生式(从叶子构造解析树)?
- razor - 是否可以通过 Razor 页面中的 PageRoute 或约定匹配所有子目录?
- javascript - JavaScript 控制台游戏积分系统
- android - 如何在高级或用户模式下启动安卓应用;应用程序在启动时读取变量
- laravel-nova - 如何在 laravel nova 上实现审批模型