我在弄清楚如何使我的代码按需运行时遇到困难。
如演示所示,我有一个表,单击添加按钮时会添加一个新行。一旦表格行达到某个高度(例如,添加5行后),我需要一个垂直滚动条来显示,同时我需要保持一个粘性标题。基本上,我需要将表格行设置为固定高度。
所附的屏幕截图显示了我希望滚动条显示的位置。不好意思的歉意。
HTML看起来像这样
<div class="table-container">
<table mat-table [dataSource]="dataSource">
<ng-container matColumnDef="category">
<th mat-header-cell *matHeaderCellDef >Category</th>
<td mat-cell *matCellDef="let code" >
<mat-form-field class="code">
<mat-select>
<mat-option *ngFor=" let category of categories" [value]="category.code" class="dropdownpPopUp" (keydown.ArrowDown)="onDown()">{{category.code}}</mat-option>
</mat-select>
</mat-form-field>
</td>
</ng-container>
<ng-container matColumnDef="type">
<th mat-header-cell *matHeaderCellDef>Type</th>
<td mat-cell *matCellDef="let code" >
<mat-form-field class="type">
<mat-select >
<mat-option *ngFor=" let type of types" [value]="type.code" class="dropdownpPopUp" (keydown.ArrowDown)="onDown()">{{type.code}}</mat-option>
</mat-select>
</mat-form-field>
</td>
</ng-container>
<ng-container matColumnDef="additionalCode" class="parent" >
<th mat-header-cell *matHeaderCellDef>Additional Code</th>
<td mat-cell *matCellDef="let element" class="parent" >
<mat-form-field class="type">
<input matInput (keyup)="toggleLookup($event)" autocomplete="off" (keydown.ArrowDown)="onDown()">
</mat-form-field>
<div *ngIf="expanded" class="child">Yah it expanded
<button (click)="expanded = false">Close</button>
</div>
</td>
</ng-container>
<ng-container matColumnDef="ref">
<th mat-header-cell *matHeaderCellDef>Reference</th>
<td mat-cell *matCellDef="let element" >
<mat-form-field>
<input matInput [(ngModel)]="element.type" (keydown.ArrowDown)="onDown()" autocomplete="off">
</mat-form-field>
</td>
</ng-container>
<ng-container matColumnDef="add">
<th mat-header-cell *matHeaderCellDef>
<button mat-icon-button (click)="addRow()" matTooltip="Add Row">
<mat-icon>add</mat-icon>
</button>
</th>
<td mat-cell *matCellDef="let code; let i = index;">
<button mat-icon-button (click)="removeAt(i)" matTooltip="Remove Row">
<mat-icon>clear</mat-icon>
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="columns"></tr>
<tr mat-row *matRowDef="let rows; columns: columns;"></tr>
</table>
<div *ngIf="dataSource.filteredData.length > 0" > <mat-paginator [pageSizeOptions]="[5]" showFirstLastButtons class="paginator"></mat-paginator></div>
</div>
组件添加功能
addRow() {
this.doAddRow();
this.expanded = false;
}
private doAddRow() {
ELEMENT_DATA.push({ code: '', type: '', reference: '' });
this.dataSource = new MatTableDataSource(ELEMENT_DATA);
}
答案 0 :(得分:0)
您需要做的是在表格外添加一个
div
并提供一个min-height
属性。
app.component.css
.main-table{
max-height:42vh;
overflow-y:scroll;
overflow-x:hidden;
}
app.component.html
<ol>
<li>Select + to add rosw</li>
</ol>
<p>After 5 new rows added a vertical scroll bar should aprear and when srolling the header row should still be visible</p>
<div class="table-container">
<div class="main-table">
<table mat-table [dataSource]="dataSource">
<ng-container matColumnDef="category">
<th mat-header-cell *matHeaderCellDef >Category</th>
<td mat-cell *matCellDef="let code" >
<mat-form-field class="code">
<mat-select>
<mat-option *ngFor=" let category of categories" [value]="category.code" class="dropdownpPopUp" (keydown.ArrowDown)="onDown()">{{category.code}}</mat-option>
</mat-select>
</mat-form-field>
</td>
</ng-container>
<ng-container matColumnDef="type">
<th mat-header-cell *matHeaderCellDef>Type</th>
<td mat-cell *matCellDef="let code" >
<mat-form-field class="type">
<mat-select >
<mat-option *ngFor=" let type of types" [value]="type.code" class="dropdownpPopUp" (keydown.ArrowDown)="onDown()">{{type.code}}</mat-option>
</mat-select>
</mat-form-field>
</td>
</ng-container>
<ng-container matColumnDef="additionalCode" class="parent" >
<th mat-header-cell *matHeaderCellDef>Additional Code</th>
<td mat-cell *matCellDef="let element" class="parent" >
<mat-form-field class="type">
<input matInput (keyup)="toggleLookup($event)" autocomplete="off" (keydown.ArrowDown)="onDown()">
</mat-form-field>
<div *ngIf="expanded" class="child">Yah it expanded
<button (click)="expanded = false">Close</button>
</div>
</td>
</ng-container>
<ng-container matColumnDef="ref">
<th mat-header-cell *matHeaderCellDef>Reference</th>
<td mat-cell *matCellDef="let element" >
<mat-form-field>
<input matInput [(ngModel)]="element.type" (keydown.ArrowDown)="onDown()" autocomplete="off">
</mat-form-field>
</td>
</ng-container>
<ng-container matColumnDef="add">
<th mat-header-cell *matHeaderCellDef>
<button mat-icon-button (click)="addRow()" matTooltip="Add Row">
<mat-icon>add</mat-icon>
</button>
</th>
<td mat-cell *matCellDef="let code; let i = index;">
<button mat-icon-button (click)="removeAt(i)" matTooltip="Remove Row">
<mat-icon>clear</mat-icon>
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="columns"></tr>
<tr mat-row *matRowDef="let rows; columns: columns;"></tr>
</table>
</div>
<div *ngIf="dataSource.filteredData.length > 0" > <mat-paginator [pageSizeOptions]="[5]" showFirstLastButtons class="paginator"></mat-paginator></div>
</div>
答案 1 :(得分:0)
实际上,角材料documentation涵盖了这一点。
通过使用位置:粘性样式,可以将表的行和列设置为 固定,以使它们即使滚动也不会离开视口。的 该表提供的输入将自动应用正确的CSS 样式,使行和列变得粘稠。
您只需要使用<tr>
指令对mat-header-row
标签进行以下更改。
<tr mat-header-row *matHeaderRowDef="columns; sticky: true"></tr>
此外,您将需要在表周围编辑容器类以包含以下属性:
.table-container {
height: 400px;
overflow: auto;
/*
other CSS properties
*/
}
这将使您的物料数据表具有粘性标头。这是官方文档提供的demo。