User-893317190 posted
Hi comicrage ,
From the link you provided , I have change a little and successfully show all the columns.
Below is my code.
export interface PeriodicElement {
;
names: {name:String}[]
}
const ELEMENT_DATA: PeriodicElement[] = [
{, names: [ {name: 'name1'},
{name: 'name2'},
{name: 'name3'}
]},
{, names: [ {name: 'name1'},
{name: 'name2'},
{name: 'name3'}
]},
{, names: [ {name: 'name1'},
{name: 'name2'},
{name: 'name3'}
]},
{,names: [ {name: 'name1'},
{name: 'name2'},
{name: 'name3'}
]},
{, names: [ {name: 'name1'},
{name: 'name2'},
{name: 'name3'}
]},
{, names: [ {name: 'name1'},
{name: 'name2'},
{name: 'name3'}
]},
{, names: [ {name: 'name1'},
{name: 'name2'},
{name: 'name3'}
]},
{, names: [ {name: 'name1'},
{name: 'name2'},
{name: 'name3'}
]},
{, names: [ {name: 'name1'},
{name: 'name2'},
{name: 'name3'}
]},
{,names: [ {name: 'name1'},
{name: 'name2'},
{name: 'name3'}
]},
];
@Component({
selector: 'app-my-table-component',
templateUrl: './my-table-component.component.html',
styleUrls: ['./my-table-component.component.css']
})
export class MyTableComponentComponent implements OnInit {
displayedColumns: string[] = ['position','name1','name2','name3'];
dataSource = ELEMENT_DATA;
constructor() { }
ngOnInit() {
}
}
My html.
<div>
<table mat-table [dataSource]="dataSource">
<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= "{{ displayName}}" *ngFor=" let displayName of ['name1','name2','name3'];index as i">
<th mat-header-cell *matHeaderCellDef> {{ displayName}}</th>
<td mat-cell *matCellDef="let srow"> {{ srow.names[i].name}}
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
</div>
Please pay attention I removed ng-template.
The result.

Best regards,
Ackerly Xu