网站搜索

typescript - Angular Material 表格中的 If 条件


我正在使用 Angular Material 表格,我想根据 if 条件隐藏表格中的一列。如果条件为真,则该列在页面上显示,否则隐藏。

这是我的 HTML 代码。

 <ng-container matColumnDef="delete">   
  <th class="th" mat-header-cell  *matHeaderCellDef> Delete </th>
    <td mat-cell *matCellDef="let element" ><span><i class="fa fa-trash" aria-hidden="true" (click)="check(element._id)"  style="cursor: pointer;"  data-toggle="modal" data-target="#dModal"></i></span> 
     </td>  
  </ng-container>

这是我的 TypeScript 代码

 displayedColumns: string[] = ['assessment','status','action','issue','created','delete'];

我试过但失败了,有人能帮我吗?

答案#1

如果你想根据 if 和 else 条件隐藏列,你应该动态构建 displayedColumns 数组。

例如。

你想隐藏删除列,displayedColumns 数组的值如下

this.displayedColumns = ['assessment','status','action','issue','created'];

答案#2

@Murugan 的回答很好,如果你只有几个字段。但如果你有很多列,使用其他方法可能会更好。在我的情况下,我有很多列,比如:

columns = [{columnDef: '1',...}, ... columnDef: '50',...]
displayedColumns = this.columns.map(c => c.columnDef);

并且取决于情况,我需要删除第30、31、43列。然后我有其他 displayedColumnsToRemove=['30','31','43',]

在我的条件语句中我移除了它

if (conditional) {
  this.displayedColumns = _.xor(this.displayedColumns,this.displayedColumnsToRemove);
      }

我正在使用 lodash 库 (_.xor),但如果你不能使用,我在寻找其他方法来移除这些元素。