html - 使用Angular显示/隐藏垫表列?
问题描述
我目前有一个从垫表中删除列的功能。这非常有效,尽管当我将列添加回表中时,因为没有保留列索引。重新添加列时有什么方法可以保留列顺序?或者甚至可能有更好的方法来做到这一点?!
谢谢
component.ts
dataSource : DataSource;
displayedColumns = [
"COLUMN1",
"COLUMN2",
];
columnClick(colName: string) {
const colIndex = this.displayedColumns.findIndex(col => col === colName);
if (colIndex >= 0) {
this.displayedColumns.splice(colIndex, 1);
} else {
this.displayedColumns.push(colName);
}
}
component.html
<button mat-button [matMenuTriggerFor]="menu">Menu</button>
<mat-menu #menu="matMenu">
<button mat-menu-item (click)="columnClick('COLUMN1')">
<mat-icon></mat-icon>
<span>COLUMN1/span>
</button>
<button mat-menu-item (click)="columnClick('COLUMN2')">
<mat-icon></mat-icon>
<span>COLUMN2</span>
</button>
</mat-menu>
<div class='table-container'>
<mat-table mat-table [dataSource]="dataSource" matSort class="results">
<ng-container matColumnDef="COLUMN1">
<mat-header-cell mat-header-cell *matHeaderCellDef mat-sort-header>COLUMN1</mat-header-cell>
<mat-cell *matCellDef="let row" >
<span>{{row.COLUMN1}}</span>
</mat-cell>
</ng-container>
<ng-container matColumnDef="COLUMN2">
<mat-header-cell mat-header-cell *matHeaderCellDef mat-sort-header>COLUMN2</mat-header-cell>
<mat-cell *matCellDef="let row" >{{row.COLUMN2}}</mat-cell>
</ng-container>
</mat-table>
</div>
解决方案
您可以使用columnDefinitions
和hide
属性来实现。
TS:组件内的代码。
columnDefinitions = [
{ def: 'id', label: 'ID', hide: this.id.value},
{ def: 'description', label: 'Description', hide: false}
]
getDisplayedColumns():string[] {
return this.columnDefinitions.filter(cd=>!cd.hide).map(cd=>cd.def);
}
HTML:
添加<mat-row>
到您的表格中
<mat-row *matRowDef="let row; columns: getDisplayedColumns()"></mat-row>
注意:完整的演示代码可在Stackblitz Demo中找到。
推荐阅读
- node.js - AWS S3 文件上传
- python - 在 Pandas 中查找嵌套文档到数据框
- python - python中nlp的空间模型没有产生实体标签
- azure - Azure 文件共享的符号链接的替代方案
- python - Pandas:用另一列值填充 Pandas 数据框列中的字符串中的参数
- java - 在Java中循环多个对象
- swift5 - AVPlayerViewController 滑动 UISwipeGestureRecognizer.up 不工作 Xcode 12 tvOS 14
- python - 由于 AttributeError,在列表迭代期间无法调用对象的类函数
- excel - Excel 公式对符合指定条件的值进行分组
- gstreamer - 如何使用 Gstreamer 创建 RTSP 服务器