Я думаю, что в Angular вы определяете таблицу на основе ваших данных. например, у вас есть поля массива, определяющие столбцы, а массив данных определяет, что на самом деле находится в таблице.
<table >
<thead>
<tr>
<th *ngFor='let key of this.fields'>{{key}}</th>
</tr>
</thead>
<tbody>
<tr *ngFor='let row of this.data ' >
<td scope="row" *ngFor='let key of this.fields'> {{row[key]}} </td>
</tr>
</tbody>
</table>
когда вам нужен новый столбец, просто вставьте новое поле в поля. как
fields.push('newcolumn');
когда вам нужен новый ряд, просто выполните:
data.push({col1: '', col2:'', newcolumn: ''});