angular - 函数更新与 [(ngModel)] 绑定的数组中的所有对象
问题描述
我有一个包含动态加载数据的容器。
<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>
它基本上是一个要填写的时间表列表。显示基本信息,然后用户可以输入一个数量 if hours (-> hoursLogged),然后调用 calculate() 方法,自动填写要填写的数量有薪酬的:
calculate(index) {
console.log("updating index: " + index);
this.timeSheets[index].payment = (5 * this.timeSheets[index].hoursLogged);
}
现在这就是问题所在:
每当我在一个字段中输入几个小时时,所有付款字段也会被填写,尽管我使用绑定付款字段
[(ngModel)]="timeSheets[i].payment"
所以我的问题是:为什么当我专门绑定对象的各个元素并且还专门为所述元素调用 calculate() 函数时,所有字段都被更新了?
感谢您的任何指示。
解决方案
感谢用户 Arcteezy 和 AJT_82,以下解决了这个问题:
字段名称需要 - 当然 - 是唯一的。所以这就是有效的(如果有人偶然发现这个问题:
<input name="payment_{{i}}" type="number"[(ngModel)]="timeSheets[i].payment" value="{{timeSheets[i].payment}}"/>
推荐阅读
- mysql - 选择过去 7 天使用的活动和非活动 MySQL
- php - 将 JSON 数组发送到 PHP
- ruby - logstash 版本 7.1.1 上的 ruby tIDENTIFIER 错误
- javascript - Javascript中的异步和等待问题
- php - 如何在 Laravel 中不使用循环插入多行(对象数组)?
- python - 我在 Python 中使用自定义函数时遇到了麻烦
- c - 将命令的输出定向到 C 文件的输入
- php - 如何在 laravel 中创建文件夹
- opengl - 当纹理使用两次时,GL_TEXTURE_CUBE_MAP_SEAMLESS 切换
- windows - Powershell 磁盘管理