Ваша проблема в том, что у вас есть только одна группа форм, dropForm
, с двумя элементами управления: quantity
и longueur
. Даже если у вас есть несколько html входов для longueur
и quantity
, они имеют одинаковую ссылку в компоненте
Итак, с вашим forEach
l oop вы на самом деле исправляете все ваши элементы управления для каждой итерации. Вот почему у вас одинаковое значение для всех ваших элементов управления, то есть значение для последнего объекта, который перебрал l oop.
Опция # 1
Возможное решение состоит в том, чтобы иметь несколько формировать группы, как в этом примере stackblitz
component.ts
//dropForms initialisation
this.quotationDetails.map(() =>
{
let group = this.formBuilder.group(
{
longueur: [''],
quantity: [''],
});
this.dropForms.push(group)
}
this.quotationDetails.forEach( (myArray, index) => {
this.dropForms[index].patchValue({
longueur: this.quotationDetails[index].longueur,
component. html
<div class="d-flex flex-row" *ngFor="let products of quotationDetails; let index=index">
<form [formGroup]="dropForms[index]"> <!-- 1 form group per quotation -->
Опция # 2
Другое решение, чтобы иметь только 1 formGroup, состоит в том, чтобы дать динамические c управляющие имена
component.ts
//Initialisation of dropForm
this.quotationDetails.forEach((val, index)=>
{
group[`longueur_${index}`] = '';
group[`quantity_${index}`] = ''
});
this.dropForm = this.formBuilder.group(
group
)
//Patch
this.quotationDetails.forEach( (myArray, index) => {
let patchValue = {};
patchValue[`longueur_${index}`] = this.quotationDetails[index].longueur;
patchValue[`quantity_${index}`] = this.quotationDetails[index].quantity;
this.dropForm.patchValue(patchValue);
компонент. html
<form [formGroup]="dropForm">
<div class="products">
<div class="d-flex flex-row" *ngFor="let products of quotationDetails; let index = index">
<a>
<input class="number" formControlName="longueur_{{index}}" value="" type="number">
Пример Stackblitz