У меня есть следующий html внутри ngForm:
<div class="form-group form-group-flex" *ngFor="let customerRole of customerRoles; let i = index">
<div class="role-name">
<label for="roleName">Rolename{{i + 1}}</label>
<input type="text" class="form-control" name='role-name' id="roleName" [(ngModel)]="customerRole.name"/>
</div>
<div class="hourly-wage"> // can ignore this div, works similary as role-name above
<label for="hourlyWage">Hourly wage</label>
<div class="input-group">
<input type="number" class="form-control" name='hourlyWage' id="hourlyWage"
[(ngModel)]="customerRole.hourlyWage"/>
<div class="input-group-append">
<span class="input-group-text ignore-radius">€</span>
</div>
</div>
</div>
<button type="button" class="btn btn-dark btn-sm" id="deleteRole" (click)="deleteRole(customerRole)" ngbTooltip="Delete role">
<i class="fa fa-trash" aria-hidden="true"></i>
</button>
</div>
<div class="row">
<a class="add-role-icon">
<i class="fa fa-plus" (click)="addRole()" placement="top" ngbTooltip="Add role"></i>
</a>
<label *ngIf="customerRoles.length === 0; else addMoreRoles">Add role</label>
<ng-template #addMoreRoles>
<label>Add another role</label>
</ng-template>
</div>
</div>
Метод addRole()
выглядит следующим образом:
addRole() {
this.customerRoles.push(createInitialRole());
}
customerRoles - это просто массив, содержащий роли.
И вот как это выглядит:
![enter image description here](https://i.stack.imgur.com/msJrn.png)
Таким образом, всегда есть новая роль, содержащая роленое имя и hourlyWage, добавляемая при каждом нажатиикнопка «добавить другую роль». У меня проблемы с привязкой ngModel, каждый раз, когда я добавляю другую роль, каждое входное значение по какой-то причине изменяется на значение последнего элемента, добавленного в массив customerRoles.
Так что, если я добавлю еще одну роль к изображению выше, это будет выглядеть так:
![enter image description here](https://i.stack.imgur.com/XuTPT.png)
Каждое входное значение в представлении изменяется на значение последней добавленной роли, которая в этом случае содержитпустое имя и пустая почасовая оплата. Роли 1 и 2 связываются со значением Роли 3 после ее добавления по некоторым причинам. Массив customerRoles содержит правильные элементы. Например, он все еще содержит роль младшего разработчика программного обеспечения в 0-м индексе. Почему он внезапно отображает последнее добавленное значение в массиве вместо значения, к которому он привязан? Если я использую
value="{{customerRole.name}}"
(input)="customerRole.name= $event.target.value"
вместо
[(ngModel)]="customerRole.name"
, все работает как положено, но это обходной путь, который я не хочу делать.
Редактировать:
Только для целей тестирования, если я отображаю customerRole.name
в метке над полем ввода, как это
<label for="roleName">{{customerRole.name}}</label>
<input type="text" class="form-control" name='role-name' id="roleName" [(ngModel)]="customerRole.name"/>
метка продолжает показывать правильное значение, в то время как поле ввода переключается на значение последнегоэлемент добавлен, как упоминалось ранее.