首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Angular?显示/隐藏mat-table列

使用Angular?显示/隐藏mat-table列
EN

Stack Overflow用户
提问于 2021-03-03 00:40:16
回答 1查看 118关注 0票数 0

我目前有一个从mat-table中删除列的函数。这非常有效,尽管当我要将列添加回表中时,因为列索引没有保留。有没有办法在重新添加列时保持列的顺序?或者甚至是更好的方式来做这件事?!

谢谢

代码语言:javascript
复制
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);
    }
  }
代码语言:javascript
复制
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>
EN

回答 1

Stack Overflow用户

发布于 2021-03-03 00:54:44

您可以使用columnDefinitionshide属性来实现此目的。

TS:组件内部的代码。

代码语言:javascript
复制
 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);
  }

超文本标记语言:在表中添加<mat-row>

代码语言:javascript
复制
<mat-row *matRowDef="let row; columns: getDisplayedColumns()"></mat-row>

注意:完整的演示代码可以在Stackblitz Demo中找到。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66443491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档