Ответ 1
Попробуйте обновить угловой материал в вашем проекте, потому что липкий атрибут был добавлен в 6.2.3.
Как сделать компонент заголовка таблицы данных установленным вверху, а Paginator зафиксирован на дне?
Это мой HTML:
<div class="example-container mat-elevation-z8">
<table mat-table #itemsTable [dataSource]="dataSource" class="items-list">
<ng-container matColumnDef="position">
<th mat-header-cell *matHeaderCellDef> No. </th>
<td mat-cell *matCellDef="let element"> {{element.position}} </td>
</ng-container>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef> Name </th>
<td mat-cell *matCellDef="let element"> {{element.name}} </td>
</ng-container>
<ng-container matColumnDef="weight">
<th mat-header-cell *matHeaderCellDef> Weight </th>
<td mat-cell *matCellDef="let element"> {{element.weight}} </td>
</ng-container>
<ng-container matColumnDef="symbol">
<th mat-header-cell *matHeaderCellDef> Symbol </th>
<td mat-cell *matCellDef="let element"> {{element.symbol}} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="this.componentsDataService.displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: this.componentsDataService.displayedColumns;" (click)="onRowClicked(row)"></tr>
</table>
<mat-paginator [pageSizeOptions]="[50, 100, 250]" showFirstLastButtons></mat-paginator>
</div>
Я пытался добавить sticky
к <tr mat-header-row>
из документации, но он не работает.
Мой импорт в файл.ts:
import { Component, OnInit, OnChanges, Input, ViewChild } from '@angular/core';
import { TabsDataService } from 'src/app/services/tabs-data.service';
import { ComponentsDataService } from 'src/app/services/components-data.service';
import { MatPaginator, MatTableDataSource, MatTable, MatTableModule } from '@angular/material'
;
Попробуйте обновить угловой материал в вашем проекте, потому что липкий атрибут был добавлен в 6.2.3.
Я нашел в примерах на материале сайт, что заголовок может быть исправлен путем добавления липкой к matHeaderRowDef:
<tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: true">
Для paginator я добавил класс к mat-paginator:
<mat-paginator ...
class="mat-paginator-sticky">
с классом, основанным на ответе в ссылке @frederik, представленной в комментариях
.mat-paginator-sticky {
bottom: 0px;
position: sticky;
z-index: 10;
}
Ниже CSS работает для меня:
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
.mat-header-row{
position: sticky;
top: 0;
z-index: 100;
background: white;
}
Вы можете использовать обычный липкий mat-footer-row
нижнего mat-footer-row
с colspan
и поместить paginator внутрь:
<table mat-table>
...
<ng-container matColumnDef="paginator">
<td mat-footer-cell *matFooterCellDef colspan="2">
<mat-paginator ...></mat-paginator>
</td>
</ng-container>
<tr mat-footer-row *matFooterRowDef="['paginator']; sticky: true"></tr>
</table>
И используйте такой стиль, чтобы сделать его более привлекательным:
.mat-row:last-child td {
border-bottom: none;
}
.mat-footer-row:first-child td {
border-top: 1px solid rgba(0, 0, 0, 0.12);
}
.mat-footer-cell .mat-paginator {
margin-left: -24px;
margin-right: -24px;
}