我有一个带有动态加载数据的容器。
<ng-container *ngFor="let timeSheet of timeSheets ;trackBy: trackId; let i = index;">
<tr *ngIf="!timeSheet.client.exitDate || compareDate(timeSheet.client.exitDate, selectedDate)==1">
<td>{{timeSheet.client.lastName}}</td>
<td>{{timeSheet.client.firstName}}</td>
<td>{{timeSheet.client.exitDate | date:'dd.MM.yyyy'}}</td>
<td class="hours-column"><input name="hoursLogged" [(ngModel)]="timeSheets[i].hoursLogged" type="number" (change)="calculate(i)" /></td>
<td class="hours-column">
<input name="payment" type="number" [(ngModel)]="timeSheets[i].payment" value="{{timeSheets[i].payment}}"/>
<div *ngIf="!timeSheets[i].plausible">Nope</div>
</td>
</tr>
</ng-container>
基本上是要填写的时间表的列表。显示基本信息,然后用户可以输入小时数(-> hoursLogged)的金额,然后调用calculate()方法来自动填写支付金额:
calculate(index) {
console.log("updating index: " + index);
this.timeSheets[index].payment = (5 * this.timeSheets[index].hoursLogged);
}
现在这是有问题的地方:
每当我在一个字段中输入几个小时时,所有付款字段也会被填写,尽管事实上我使用来绑定付款字段
[(ngModel)]="timeSheets[i].payment"
所以我的问题是:当我专门绑定对象的各个元素并专门为该元素调用calculate()函数时,为什么所有字段都会更新?
感谢任何指针。
答案 0 :(得分:0)
感谢用户Arcteezy和AJT_82,以下内容确实解决了此问题:
当然,字段名称必须唯一。所以这是有效的方法(以防somone偶然发现了这个问题:
<input name="payment_{{i}}" type="number"[(ngModel)]="timeSheets[i].payment" value="{{timeSheets[i].payment}}"/>