Произошла ошибка с вашим шаблоном и с вашим методом updateFormProducts
.
Вот исправления:
updateFormProducts(ev: any, idd: any, componentid: any, index) {
console.log(ev.source.viewValue)
console.log(componentid)
if (ev.isUserInput) {
if (componentid === 'products_id') {
console.log(ev.source.viewValue);
( < FormArray > this.myform.get('products_id')).at(index).patchValue(ev.source.viewValue);
} else {
console.log('error');
}
}
}
В этом методе вам нужно будет передать индексполе State в вашем FormArray
, а затем вызовите patchValue
только для того поля, которое вы сможете получить, используя (<FormArray>this.myform.get('products_id')).at(index)
Затем в вашем шаблоне вам также необходимо исправить некоторые вещи.Вот ваш обновленный шаблон:
<form [formGroup]="myform" (ngSubmit)="onAddprod()" class="example-form">
<div class="form-group">
<div formArrayName="products_id">
<div *ngFor="let s of myform.get('products_id').controls; let i = index">
<mat-form-field class="example-full-width">
<input [formControlName]="i" matInput placeholder="State" aria-label="State" [matAutocomplete]="auto">
<mat-autocomplete #auto="matAutocomplete" [displayWith]="displayWith">
<mat-option *ngFor="let state of filteredStates | async" (onSelectionChange)="updateFormProducts($event, state.products_name, 'products_id', i)" [value]="state.products_id">
<span>{{state.products_name}}</span>
</mat-option>
</mat-autocomplete>
</mat-form-field>
</div>
<div class="input-field col s2">
<button type="button" class="btn" (click)="onAddItem()">+</button>
</div>
</div>
</div>
<br>
<div class="input-field col s2">
<input formControlName="unit_price" id="unit_price" type="text">
</div>
<button type="submit" class="btn waves-effect waves-light">Register</button>
</form>
Вот Обновленный StackBlitz для вашей ссылки.
ОБНОВЛЕНИЕ
Для вашей проблемы, вы можете сделать это:
В шаблоне создайте getter
:
get productIdFormArray () {
return (<FormArray>this.myform.get('products_id')).controls;
}
И в шаблоне вы можете использовать productIdFormArray
, чтобы перебрать FormArray
:
...
<div *ngFor="let s of productIdFormArray; let i = index">
<mat-form-field class="example-full-width">
...
Вы также можете найти изменения в обновленном StackBlitz.