在材料表页脚中包含按钮和分页器

时间:2018-09-13 14:18:49

标签: angular pagination angular-material angular-material-table

我使用Angular Material Table,并且需要一个命令按钮和表格的页脚位于表格的页脚行中,如下所示 enter image description here

我的代码实际上就是这样

<div class="example-table-container mat-elevation-z8">

  <table mat-table [dataSource]="dataSource" multiTemplateDataRows>
    <!-- DataSource's displayedColumns -->
    <ng-container matColumnDef="{{column}}" *ngFor="let column of displayedColumns">
      <th mat-header-cell *matHeaderCellDef> {{column}} </th>
      <td mat-cell *matCellDef="let element"> {{element[column]}} </td>
    </ng-container>


    <!-- Exporter column -->
    <ng-container matColumnDef="exporter">
      <td mat-footer-cell *matFooterCellDef colspan="2">
        <button class="btn btn-primary" (click)="exportCsv(dataSource)">
          <i class="material-icons" title="Exporter en CSV">save_alt </i>
        </button>
      </td>
    </ng-container>

    <!-- Paginator column -->
    <ng-container matColumnDef="paginator">
      <td mat-footer-cell *matFooterCellDef colspan="3">
        <mat-paginator [pageSizeOptions]="[5,10,20]" showFirstLastButtons></mat-paginator>
      </td>
    </ng-container>

    <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
    <tr mat-row *matRowDef="let element; columns: displayedColumns;"></tr>

    <tr mat-footer-row *matFooterRowDef="['exporter', 'paginator']"></tr>

  </table>
</div>

如您所见,我将<mat-paginator>元素移到了td内...但这打破了分页程序,因为它不再对表进行分页了...(您看到的是“ 0 0“并禁用分页按钮)...当我将其放回table元素之外时,分页器将恢复正常...

如何正确地将分页器置于页脚行内?

4 个答案:

答案 0 :(得分:10)

最后,如果有人遇到相同的问题,我将使用工具栏:

  </table>

  <mat-toolbar>
    <mat-toolbar-row>
      <mat-icon (click)="exportCsv(dataSource)" title="Export as CSV">save_alt</mat-icon>
      <span class="example-spacer"></span>
      <mat-paginator class="paginator" [pageSizeOptions]="[5, 10, 20]"></mat-paginator>
    </mat-toolbar-row>
  </mat-toolbar>

</div>

给出了: enter image description here

答案 1 :(得分:0)

我通过在paginator中分配数据源的ngAfterViewInit()解决了这个问题:

ngAfterViewInit(): void {
  this.tableDataSource.paginator = this.paginator;
}

答案 2 :(得分:0)

您可以使用分页器作为粘性页脚:

注意:想法是只在一个列中放置一个页脚单元格(此处取第一列),然后定义一个全宽度的colspan。

<div class="example-table-container mat-elevation-z8">

  <table mat-table [dataSource]="dataSource" multiTemplateDataRows>
    <!-- DataSource's displayedColumns -->
    <ng-container matColumnDef="{{column}}" *ngFor="let column of displayedColumns">
      <th mat-header-cell *matHeaderCellDef> {{column}} </th>
      <td mat-cell *matCellDef="let element"> {{element[column]}} </td>
      <td mat-footer-cell *matFooterCellDef colspan="20" when="column == displayedColumns[0]">
        <mat-paginator [pageSizeOptions]="[5,10,20]" showFirstLastButtons></mat-paginator>
      </td>
    </ng-container>

    <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
    <tr mat-row *matRowDef="let element; columns: displayedColumns;"></tr>

    <tr mat-footer-row *matFooterRowDef="[displayedColumns[0]]; sticky: true"></tr>

  </table>
</div>

答案 3 :(得分:-3)

通过在垫子分页器中添加宽度:100%,您将获得此设计。 例如:。