排序有效,但 table 中的数据未排序 - Angular Material Table
Sorting works, but the data in the table is not sorted - Angular Material Table
由于某些原因,表面垫子的排序有箭头移动,因此排序应该可以,但是没有排序...
这是 HTML :
<div class="mat-elevation-z8">
<table mat-table [dataSource]="dataSource" matSort>
<!-- name -->
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ model.fields.name.label }}</th>
<td mat-cell *matCellDef="let element"> {{ element.name }} </td>
</ng-container>
<!-- ... -->
</table>
</div>
在我的 component.ts:
import { MatSort } from '@angular/material/sort';
import { MatTableDataSource } from '@angular/material/table';
export class DevizaListComponent implements OnInit {
dataSource = new MatTableDataSource<DevizaInterface>(devizas);
devizas: DevizaInterface[] = [
{
name: 'dollar',
code: 'USD' ,
},
//...
//...
];
//...
@ViewChild(MatSort, { static: true }) sort: MatSort;
//...
constructor() { }
ngOnInit() {
this.dataSource.sort = this.sort;
}
}
我在 app.module.ts 中导入了这个:
import { MatTableModule } from '@angular/material/table';
import { MatSortModule } from '@angular/material/sort';
@NgModule({
imports: [
MatTableModule,
MatSortModule,
],
})
控制台不显示错误消息。排序的界面出现箭头,但table没有按应有的顺序排序是什么原因?
很有可能,当您将 this.sort
分配给 ngOnInit
中的 this.dataSource.sort
时,它尚未定义。因此,dataSource
不接收排序事件。这可能是由于结构指令(即 *ngIf
)仅有条件地在模板中包含 table。
可以通过更改@ViewChild
上的static
值并在ngAfterViewInit
livecycle hook instead. Please consult the Angular documentation about the component's livecycle 中分配sort
来解决问题。
export class DevizaListComponent implements AfterViewInit {
...
@ViewChild(MatSort, { static: false}) sort: MatSort;
ngAfterViewInit() {
this.dataSource.sort = this.sort;
}
You should also change the order of your class members and create dataSource
after devizas
has been initialized.
由于某些原因,表面垫子的排序有箭头移动,因此排序应该可以,但是没有排序...
这是 HTML :
<div class="mat-elevation-z8">
<table mat-table [dataSource]="dataSource" matSort>
<!-- name -->
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ model.fields.name.label }}</th>
<td mat-cell *matCellDef="let element"> {{ element.name }} </td>
</ng-container>
<!-- ... -->
</table>
</div>
在我的 component.ts:
import { MatSort } from '@angular/material/sort';
import { MatTableDataSource } from '@angular/material/table';
export class DevizaListComponent implements OnInit {
dataSource = new MatTableDataSource<DevizaInterface>(devizas);
devizas: DevizaInterface[] = [
{
name: 'dollar',
code: 'USD' ,
},
//...
//...
];
//...
@ViewChild(MatSort, { static: true }) sort: MatSort;
//...
constructor() { }
ngOnInit() {
this.dataSource.sort = this.sort;
}
}
我在 app.module.ts 中导入了这个:
import { MatTableModule } from '@angular/material/table';
import { MatSortModule } from '@angular/material/sort';
@NgModule({
imports: [
MatTableModule,
MatSortModule,
],
})
控制台不显示错误消息。排序的界面出现箭头,但table没有按应有的顺序排序是什么原因?
很有可能,当您将 this.sort
分配给 ngOnInit
中的 this.dataSource.sort
时,它尚未定义。因此,dataSource
不接收排序事件。这可能是由于结构指令(即 *ngIf
)仅有条件地在模板中包含 table。
可以通过更改@ViewChild
上的static
值并在ngAfterViewInit
livecycle hook instead. Please consult the Angular documentation about the component's livecycle 中分配sort
来解决问题。
export class DevizaListComponent implements AfterViewInit {
...
@ViewChild(MatSort, { static: false}) sort: MatSort;
ngAfterViewInit() {
this.dataSource.sort = this.sort;
}
You should also change the order of your class members and create
dataSource
afterdevizas
has been initialized.