angular - 在 *ngIf 内部时, Material 分页不起作用

标签 angular pagination angular-material

我有这段代码,里面有分页,但是分页不起作用。它始终显示所有元素。但是从容器 div 中删除 *ngIf ,它就可以了。 为什么会这样呢?如何让它与 *ngIf 一起工作? 我真的需要使用它。

<div *ngIf="savingTransactionsDataSource" class="mat-elevation-z8">

    <table mat-table [dataSource]="savingTransactionsDataSource">
        <ng-container [matColumnDef]="column" *ngFor="let column of items">
          ...
        </ng-container>
        <tr mat-header-row *matHeaderRowDef="savingColumnsToDisplay; sticky: true;"></tr>
        <tr mat-row *matRowDef="let row; columns: savingColumnsToDisplay;"></tr>
    </table>

    <mat-toolbar class="mat-toolbar-sticky">
        <mat-toolbar-row>

            <span class="spacer"></span>

            <mat-paginator [length]="savingTransactionsDataSource.data.length"
                           [pageSize]="5"
                           [pageSizeOptions]="[5, 10, 15, 20]"
                           showFirstLastButtons>
            </mat-paginator>

        </mat-toolbar-row>
    </mat-toolbar>
</div>

最佳答案

根据this GitHub 问题,分页器在 ngIf 内部中断,但您可以尝试使用此代码片段来解决该问题:

@ViewChild(MatPaginator) set matPaginator(mp: MatPaginator) {
    this.paginator = mp;
    this.setDataSourceAttributes();
  }

  setDataSourceAttributes() {
    this.dataSource.paginator = this.paginator;
    this.dataSource.sort = this.sort;
  }

或者,发布的另一个解决方案是使用 hidden 属性而不是 ngIf

<div [hidden]="isLoading">
  <mat-table [dataSource]="dataSource">
  ...
  </mat-table>
</div>

关于angular - 在 *ngIf 内部时, Material 分页不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64065278/

相关文章:

php mysql html 分页不起作用

angular-material - 将动态生成的输入字段连接到 mat-autocomplete

css - Angular Material 全屏问题中的分屏布局

javascript - 如何解决 Angular 中的这个路线问题?

angularjs - Angular 2 - Internet Explorer 版本 11 不显示我的应用程序。我需要做些什么才能显示出来吗?

javascript - 动态网站的分页标题

angularjs - 在单元测试中模拟 $mdSideNav

angular - <app-root> 在 ionic 项目中的作用是什么

Angular 2 Click + ngClass,如何仅应用于 SELF 而不是 ngFor 中的所有元素

performance - 像 sphinx 一样在ElasticSearch中分页结果