Потратил почти день и узнал много нового о формах Angular Reactive, но мой вопрос остался без ответа. Я просто строю список элементов с кнопкой редактирования на каждом элементе. После того, как кнопка редактирования нажата, имя и описание элемента будут доступны для редактирования и отправки. Просто и отлично работает. Теперь я хочу добавить подпункт к этому элементу, поэтому у меня есть кнопка добавления, которая добавит массив форм в эту группу форм элементов и добавит подпункт. Это работает, но проблема в том, что когда я нажимаю на другой элемент, туда же добавляется тот же подэлемент. Похоже, я не специально добавляю подпункт к элементу, на котором нажимаю кнопку редактирования. Вот как я добавляю подпункт
buildItemsForm() {
this.itemForm = this.fb.group({
Description: [''],
ItemCode: ['']
Variations: this.fb.array([])
});
}
addVariationToItem() {
const variationsControl = this.itemForm.get('Variations') as FormArray; // here i need to specify the specific item
variationsControl.push(this.itemVariation());
}
itemVariation() {
return this.fb.group({
color: ['']
})}
Это результат
{
Description: 'this is description'
ItemCode: '123'
Variations:[
color:'red' ] // Added Here
}
{
Description: 'this is description2'
ItemCode: '789'
Variations:[
color:'red' ] // But Adding it here too
}
Обновление: вот HTML. Я получаю элементы из ответа бэкэнда, который зацикливается для отображения списка элементов, а затем внутри элементов отображается каждая форма, поэтому я не думаю, что мне нужно менять верхнюю форму на FromArray, если я не создал неправильный код.
<div *ngFor="let item of items; let i = index" class="card">
<div class="item-info" *ngIf="!closeInEditItem(item)">
<div>Description : {{item.Description}}</div>
<div>Item Code : {{item.ItemCode}}</div>
<div>Variation:</div>
<button (click)="editItem(item)">Edit</button></div>
<div class="form-group" *ngIf="editSate && itemToEdit.Id == item.Id">
<form (ngSubmit)="updateItem(item)" [formGroup]="itemForm">
<textarea matInput type="text" class="form-control" placeholder="Edit Description"
formControlName="Description"></textarea>
<input matInput type="text" class="form-control" placeholder="Edit Item Code" formControlName="ItemCode">
<div formArrayName="Variations">
<div *ngFor="let variationItem of itemForm.controls['Variations'].controls; let i=index">
<input type="text" placeholder="Add Color Variation" formControlName="color">
</div>
</div>
</form>
</div>
</div>