Я не знаком с Material, поэтому я создал ванильную версию в развилке вашего стекаблица: https://stackblitz.com/edit/angular-veunf6
ts
dynamicRows: number[] = [];
addNew() {
this.dynamicRows.push(this.dynamicRows.length);
}
html
<table>
<thead>
<tr>
<th></th>
<th>Header</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let row of dynamicRows; let i = index">
<td>
<button *ngIf="i === dynamicRows.length - 1" (click)="addNew()">Add New</button>
</td>
<td>{{row}}</td>
</tr>
<tr *ngIf="dynamicRows.length === 0">
<td>
<button (click)="addNew()">Add New</button>
</td>
<td></td>
</tr>
<tr></tr>
</tbody>
</table>
Идея заключается в том, что кнопка всегда объявляется в html в каждой строке, но отображается только в том случае, если l oop находится в последнем ряду.
Я не уверен, как вы хотите обработать начальный случай, когда нет строк, поэтому я просто поместил туда строку * stati c. Вы можете сделать что-то лучше.