Нам может потребоваться больше информации о том, как должны заполняться данные, я вижу, что тэг td повторяется неправильно при итерации с итогом, имея больше тд, чем тэгов. Также переменная total является свойством внутри элемента или отделена ?. А пока я могу привести примеры для некоторых сценариев ios:
Если вы хотите, чтобы сумма была в одном тд, а сумма - это свойство i
<tr *ngFor="let i of item">
<td>{{i.product}}</td>
<td>{{i.price}}</td>
<td>{{i.quantity}}</td>
<td>{{i.total.join(,)}}</td>
</tr>
Если вы хотите, чтобы сумма была в одном тд, а сумма - это просто переменная вне массива элементов.
<tr *ngFor="let i of item let index = index">
<td>{{i.product}}</td>
<td>{{i.price}}</td>
<td>{{i.quantity}}</td>
<td>{{total[index]}}</td>
</tr>
Если вы хотите, чтобы сумма была в одном тд, а сумма - это свойство i
<tr *ngFor="let i of item">
<td>{{i.product}}</td>
<td>{{i.price}}</td>
<td>{{i.quantity}}</td>
<td>{{i.total.reduce((a, b) => a + b, 0)}}</td>
</tr>
Если вы хотите, чтобы сумма суммировалась в одном тд, а сумма - это просто переменная вне массива элементов.
<tr *ngFor="let i of item let index = index">
<td>{{i.product}}</td>
<td>{{i.price}}</td>
<td>{{i.quantity}}</td>
<td>{{total[index].reduce((a, b) => a + b, 0)}}</td>
</tr>