Я определяю ширину для каждого столбца динамически с помощью заранее определенных метаданных. Но в случае, если ширина метаданных слишком мала, чтобы поместиться в текст заголовка, я динамически определяю ширину, чтобы соответствовать тексту со значением th.scrollWidth
:
HTML:
<table mat-table [dataSource]="rows">
<ng-container matColumnDef="{{column}}" *ngFor="let column of columns">
<th #th mat-header-cell *matHeaderCellDef [fxFlex]="getColumnWidth(column.width, th)" style="white-space: nowrap">
<span>{{column.value}}</span>
</th>
<td mat-cell *matCellDef="let element;" [fxFlex]="(column.width)+'px'">
{{element[column]}}
</td>
</ng-container>
<mat-header-row *matHeaderRowDef="columns; sticky: true;"></mat-header-row>
<mat-row *matRowDef="let row; columns: columns;"></mat-row>
</table>
Это getColumnWidth
:
public getColumnWidth(width: number, th: HTMLTableHeaderCellElement): string {
const finalWidth = (width < th.scrollWidth) ? th.scrollWidth : width;
return `${finalWidth}px`;
}
Проблема в том, что когда ширина столбца имеет размер th.scrollWidth
, ширина строк отличается (column.width
), поэтому таблица выглядит как беспорядок. Как я могу получить th.scrollWidth
для строк, чтобы сделать ту же технику?