如何按未在显示列中声明的 属性 对 angular material table 行进行排序
How to sort angular material table rows by property not declared in displayed Columns
这是创建我的 table模型的代码:
const rowData = [{
id: '74b0d34f-1e2f-47d1-b1ea-55658d5d750f',
assetId: '9ff317cd-3b75-433d-a32b-949c67b84eee',
type: 'DATA_RECORDING',
eventStart: '2019-05-01T00:00:00Z',
eventEnd: '2019-05-01T00:00:00Z',
assetName: 584,
milliseconds: 3524583453452
},{
id: '74b0d34f-1e2f-47d1-b1ea-55658d5d7534',
assetId: '9ff317cd-3b75-433d-a32b-949c67b84eee',
type: 'DATA_RECORDING',
eventStart: '2019-05-01T00:00:00Z',
eventEnd: '2019-05-01T00:00:00Z',
assetName: 584,
milliseconds: 35245824528
},{
id: '74b0d34f-1e2f-47d1-b1ea-55658d5d7545',
assetId: '9ff317cd-3b75-433d-a32b-949c67b84eee',
type: 'DATA_RECORDING',
eventStart: '2019-05-01T00:00:00Z',
eventEnd: '2019-05-01T00:00:00Z',
assetName: 584,
milliseconds: 13219245949
}];
tableModel(data: Array<dataObj>) {
return [{
headers: ['DATE LOGGED', 'ASSET ID', 'DIVISION NAME', 'TYPE'],
displayedColumns: ['eventStart', 'assetId', 'divisionName', 'type'],
rows: rowData
}];
}
我希望 table 行的默认排序基于行对象的 'millisecond' 属性,但我不想在 table。有没有办法做到这一点?我在 docs 中看不到任何相关信息,设置 matSortStart="desc" 只是根据第一列(在本例中为 eventStart)对 table 进行排序。
你必须做两件事来实现:
- 添加
matSortActive="milliseconds"
以便按此列进行排序,您已经知道 matSortDirection="desc"
添加到 <table mat-table>
元素后会起作用
- 添加 css 隐藏毫秒列(我们放在最后),因为您不想显示它
相关CSS:
td.mat-cell:last-of-type,
th.mat-header-cell:last-of-type
{display:none;}
相关HTML:
<table mat-table [dataSource]="dataSource" matSort matSortActive="milliseconds" matSortDirection="desc" class="mat-elevation-z8">
<!-- id Column -->
<ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef mat-sort-header> id. </th>
<td mat-cell *matCellDef="let element"> {{element.id}} </td>
</ng-container>
<!-- type Column -->
<ng-container matColumnDef="type">
<th mat-header-cell *matHeaderCellDef mat-sort-header> type </th>
<td mat-cell *matCellDef="let element"> {{element.type}} </td>
</ng-container>
<!-- assetName Column -->
<ng-container matColumnDef="assetName">
<th mat-header-cell *matHeaderCellDef mat-sort-header> assetName </th>
<td mat-cell *matCellDef="let element"> {{element.assetName}} </td>
</ng-container>
<!-- milliseconds Column
-->
<ng-container matColumnDef="milliseconds" class='hideMe'>
<th mat-header-cell *matHeaderCellDef mat-sort-header> milliseconds </th>
<td mat-cell *matCellDef="let element"> {{element.milliseconds}} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
这是创建我的 table模型的代码:
const rowData = [{
id: '74b0d34f-1e2f-47d1-b1ea-55658d5d750f',
assetId: '9ff317cd-3b75-433d-a32b-949c67b84eee',
type: 'DATA_RECORDING',
eventStart: '2019-05-01T00:00:00Z',
eventEnd: '2019-05-01T00:00:00Z',
assetName: 584,
milliseconds: 3524583453452
},{
id: '74b0d34f-1e2f-47d1-b1ea-55658d5d7534',
assetId: '9ff317cd-3b75-433d-a32b-949c67b84eee',
type: 'DATA_RECORDING',
eventStart: '2019-05-01T00:00:00Z',
eventEnd: '2019-05-01T00:00:00Z',
assetName: 584,
milliseconds: 35245824528
},{
id: '74b0d34f-1e2f-47d1-b1ea-55658d5d7545',
assetId: '9ff317cd-3b75-433d-a32b-949c67b84eee',
type: 'DATA_RECORDING',
eventStart: '2019-05-01T00:00:00Z',
eventEnd: '2019-05-01T00:00:00Z',
assetName: 584,
milliseconds: 13219245949
}];
tableModel(data: Array<dataObj>) {
return [{
headers: ['DATE LOGGED', 'ASSET ID', 'DIVISION NAME', 'TYPE'],
displayedColumns: ['eventStart', 'assetId', 'divisionName', 'type'],
rows: rowData
}];
}
我希望 table 行的默认排序基于行对象的 'millisecond' 属性,但我不想在 table。有没有办法做到这一点?我在 docs 中看不到任何相关信息,设置 matSortStart="desc" 只是根据第一列(在本例中为 eventStart)对 table 进行排序。
你必须做两件事来实现:
- 添加
matSortActive="milliseconds"
以便按此列进行排序,您已经知道matSortDirection="desc"
添加到<table mat-table>
元素后会起作用 - 添加 css 隐藏毫秒列(我们放在最后),因为您不想显示它
相关CSS:
td.mat-cell:last-of-type,
th.mat-header-cell:last-of-type
{display:none;}
相关HTML:
<table mat-table [dataSource]="dataSource" matSort matSortActive="milliseconds" matSortDirection="desc" class="mat-elevation-z8">
<!-- id Column -->
<ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef mat-sort-header> id. </th>
<td mat-cell *matCellDef="let element"> {{element.id}} </td>
</ng-container>
<!-- type Column -->
<ng-container matColumnDef="type">
<th mat-header-cell *matHeaderCellDef mat-sort-header> type </th>
<td mat-cell *matCellDef="let element"> {{element.type}} </td>
</ng-container>
<!-- assetName Column -->
<ng-container matColumnDef="assetName">
<th mat-header-cell *matHeaderCellDef mat-sort-header> assetName </th>
<td mat-cell *matCellDef="let element"> {{element.assetName}} </td>
</ng-container>
<!-- milliseconds Column
-->
<ng-container matColumnDef="milliseconds" class='hideMe'>
<th mat-header-cell *matHeaderCellDef mat-sort-header> milliseconds </th>
<td mat-cell *matCellDef="let element"> {{element.milliseconds}} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>