代码之家  ›  专栏  ›  技术社区  ›  Snæbjørn

加载数据时隐藏mat表中的mat行

  •  3
  • Snæbjørn  · 技术社区  · 6 年前

    我不能这样做:(看 StackBlitz 对于整个代码)

    <div *ngIf="!isLoading">
      <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
    </div>
    

    因为MatTable会抛出各种错误:(

    我放不下 *ngIf="!isLoading" 在里面 MatRow 因为它已经有了一个结构指令。

    我看不到什么?请启发我。

    6 回复  |  直到 6 年前
        1
  •  5
  •   Snæbjørn    6 年前

    所以“诀窍”就是 [hidden]

    <tr mat-row *matRowDef="let row; columns: displayedColumns;" [hidden]="isLoading"></tr>

    然而,我并没有使用这个解决方案,因为它使桌子变得“神经质”。相反,我选择在表尾放置一个微调器。

        2
  •  4
  •   Sachila Ranawaka    6 年前

    不能在一个元素上使用两个结构指令。使用 ng-container

    <ng-container *ngIf="!isLoading">
      <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
    
    <ng-container>
    
        3
  •  1
  •   Antoniossss    6 年前

    我会删除加载时的数据。别耍花招。

        4
  •  1
  •   Anshuman Jaiswal    6 年前

    ng-container

    <table mat-table [dataSource]="dataSource">
      ...
      <ng-container *ngIf="!isLoading">
        <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
      </ng-container>
      ...
    </table>
    
        5
  •  0
  •   Chris K    6 年前

    尝试这样做:

    <div class="course">
    
        <div class="spinner-container" *ngIf="dataSource.loading$ | async">
            <mat-spinner></mat-spinner>
        </div>
    
        <mat-table class="lessons-table mat-elevation-z8" [dataSource]="dataSource">
            ....
        </mat-table>
    </div>
    

        6
  •  0
  •   Christoph    5 年前

    您可以使用isLoading标志控制显示的列。

    get displayedColumns() {
      return this.isLoading ? [] : ['position', 'name', 'weight', 'symbol'];
    }
    

    你的模板将再次简单,它是很好的测试。