函数更新与[[ngModel)]绑定的数组中的所有对象

时间:2019-02-03 12:25:21

标签: angular typescript

我有一个带有动态加载数据的容器。

<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"

enter image description here

所以我的问题是:当我专门绑定对象的各个元素并专门为该元素调用calculate()函数时,为什么所有字段都会更新?

感谢任何指针。

1 个答案:

答案 0 :(得分:0)

感谢用户Arcteezy和AJT_82,以下内容确实解决了此问题:

当然,字段名称必须唯一。所以这是有效的方法(以防somone偶然发现了这个问题:

<input name="payment_{{i}}" type="number"[(ngModel)]="timeSheets[i].payment" value="{{timeSheets[i].payment}}"/>