在 mat-table 的 mat-cell 内实现 if else 条件 - Angular 5

Posted

技术标签:

【中文标题】在 mat-table 的 mat-cell 内实现 if else 条件 - Angular 5【英文标题】:Implementing if else condition inside a mat-cell of a mat-table - Angular 5 【发布时间】:2019-06-04 13:59:53 【问题描述】:

我正在尝试在我的 Angular 应用程序中的 mat-table 的 mat-cell 内实现 if else 条件。但我从控制台收到错误“错误错误:StaticInjectorError(AppModule)[NgIf -> TemplateRef]:”

我的代码是

<ng-container matColumnDef="role">
    <mat-header-cell *matHeaderCellDef>Role</mat-header-cell>        
    <mat-cell *matCellDef="let user" ngIf="user.roles.length == 1">
        Admin          
    </mat-cell>
  </ng-container>

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

你有ngIf,但它应该以星号为前缀:*ngIf

此外,使用*ngIf 之类的绑定指令属性,您不需要在其中使用花括号。只是做*ngIf="user.roles.length == 1" 应该没问题。

但是,通常你不能在同一个元素上使用两个带有星号的指令,因此使用另一个 &lt;ng-container&gt; 可能是解决此问题的方法:

<ng-container matColumnDef="role">
  <mat-header-cell *matHeaderCellDef>Role</mat-header-cell>
  <ng-container *ngIf="user.roles.length == 1">
    <mat-cell *matCellDef="let user" >
      Admin          
    </mat-cell>
  </ng-container>
</ng-container>

【讨论】:

谢谢,但这不起作用,因为在 ng-container 中未定义“用户” 啊,是的,也许只是切换这两个元素的顺序。无论如何,您都必须使用 2 个元素,因为您有两个使用 * 的指令,并且每个元素只能有一个。【参考方案2】:

我也遇到过同样的问题。我想出了以下解决方案。

    您可以使用[ngClass],如下所示。
  <tr mat-footer-row [ngClass]="dataSource.length==0 ? 'hide' : ''" *matFooterRowDef="displayedColumns1"></tr>
    或者如果你想隐藏一些单元格,你可以使用[hidden]属性。这就像 CSS 的“display: none”属性。
  <tr mat-footer-row [hidden]="dataSource.length==0" *matFooterRowDef="displayedColumns1"></tr>

【讨论】:

【参考方案3】:

您可以使用一个类将显示设置为无,这样就可以了

<ng-container matColumnDef="role">
<mat-header-cell *matHeaderCellDef>Role</mat-header-cell>        
<mat-cell *matCellDef="let user" [ngClass]="'hide':user.roles.length == 1">
    Admin          
</mat-cell>

在你的样式表文件中

.hide 
  display: none;

【讨论】:

【参考方案4】:

添加包装器ng-container 可以在父容器上获取​​user 对象并在*ngIf 的子容器中使用该paren 访问变量。


    <ng-container matColumnDef="role">
      <th *matHeaderCellDef mat-header-cell>Role</th>
      <td *matCellDef="let user" mat-cell>
        <ng-container *ngIf="user.roles.length == 1;else conditionNotMet">
          Admin (Condition is met)
        </ng-container>
      </td>

      <ng-template #conditionNotMet>
        What ever logic...
      </ng-template>
    </ng-container>

【讨论】:

以上是关于在 mat-table 的 mat-cell 内实现 if else 条件 - Angular 5的主要内容,如果未能解决你的问题,请参考以下文章

如何避免使用角度材料从角度 2 中的 mat-table 传输相同的行

推送到 FormArray 不会更新 mat-table

如何更改 mat-table 中行的高度

mat-table重置mat-sort到初始状态

有啥方法可以在 Angular 材料中使用 mat-table 编辑特定的表格列

加载 Mat-table 时添加微调器?