I'm using Angular 9. How do I construct a mat-table without a header row (th) for the table? Sounds silly but if I do this

<table mat-table *ngIf="isMobile" #mobile_table [dataSource]="dataSource"> <ng-container matColumnDef="item"> <td mat-cell *matCellDef="let item_stat"> <div> {{ item_stat.max_date }} m </div> <div> <a href="{{ item_stat.mobile_path }}">{{ item_stat.title }}</a> · {{ getScore(item_stat) }} </div> </td> </ng-container> <tr mat-header-row *matHeaderRowDef="mobileDisplayedColumns"></tr> <tr mat-row *matRowDef="let row; columns: mobileDisplayedColumns;" [ngClass]="getRowClass(row)"></tr> </table> 

It produces the error

ERROR TypeError: Cannot read property 'template' of undefined at MatHeaderRowDef.extractCellTemplate (table.js:567) at table.js:2522 at Function.from (<anonymous>) at MatTable._getCellTemplates (table.js:2512) at MatTable._renderRow (table.js:2467) at table.js:2326 at Array.forEach (<anonymous>) at MatTable._forceRenderHeaderRows (table.js:2321) at MatTable.ngAfterContentChecked (table.js:1800) at callHook (core.js:4730) 

I must add

<th mat-header-cell *matHeaderCellDef></th> 

to get the table to render properly. This seems unnecessary as I don't want a header row for my table. How do I build my mat-table so that this isn't required?

1

4 Answers

You just need to remove the header line mat-header-row

<tr mat-header-row *matHeaderRowDef="mobileDisplayedColumns"></tr> 

It works fine to me.

just delete the this line:

<tr mat-header-row *matHeaderRowDef="mobileDisplayedColumns"></tr> 

Two ways

Delete <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>

Or

on your css component add :host ::ng-deep thead{display: none;}

.mat-header-row { display: none; } 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.