gpt4 book ai didi

html - 使 Angular Material 数据表行滚动,同时保持标题的粘性

转载 作者:行者123 更新时间:2023-11-27 23:53:57 29 4
gpt4 key购买 nike

Stack Blitz Demo

我无法弄清楚如何让我的代码按需要运行。

如演示所示,我有一个表,当单击添加按钮时,会添加一个新行。一旦表格行达到一定高度(例如添加 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);
}

enter image description here

最佳答案

what you have to do is add a div outside of your table and provide a min-height property.

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>

关于html - 使 Angular Material 数据表行滚动,同时保持标题的粘性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56375267/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com