If you see the below code, you'll find out that I've removed the data rows from the first table and header row from the second table. and then added a tableHeader
and tableData
ids to both table.
<table mat-table [dataSource]="dataSource" class="mat-elevation-z8" id="tableHeader">
<ng-container matColumnDef="position">
<th mat-header-cell *matHeaderCellDef> No. </th>
</ng-container>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef> Name </th>
</ng-container>
<ng-container matColumnDef="weight">
<th mat-header-cell *matHeaderCellDef> Weight </th>
</ng-container>
<ng-container matColumnDef="symbol">
<th mat-header-cell *matHeaderCellDef> Symbol </th>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
</table>
<table mat-table [dataSource]="dataSource" class="mat-elevation-z8" id="tableData">
<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-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
Now, we'll get the width of each column from the second table and reflect them in the first to fix the header.
const headerTable = document.querySelector("#tableHeader")
const dataTable = document.querySelector("#tableData")
/**
* Get width of each column named "dataWidths" and
* Fix first and last column width by subtraction 24px
* as left and right padding was styled into the first and last column of the table
* */
const dataWidths = [...dataTable.children[1].children[0].children].map(cell => cell.offsetWidth)
dataWidths[0] = dataWidths[0] - 24
dataWidths[dataWidths.length - 1] = dataWidths[dataWidths.length - 1] - 24
const headerColumns = [...headerTable.children[0].children[0].children]
headerColumns.map(column => {
column.style.width = dataWidths[count] + "px"
count++
})
Top comments (0)