Я думал, что у меня проблема с выбором матов во вложенных формах, но оказывается, что у меня проблема с .value .control в моих формах, и я не уверен, как ее исправить
, поэтому в принципеУ меня есть значения для элементов, хранящихся в массиве, и я хочу показать их на странице
Элемент: item1 Количество: 1,45 $ Причина: 1
Item: item2 Количество: 1,50 $ Причина: 2
при нажатии на кнопку редактирования я делаю скрытие / отображение полей ввода для редактирования, а не просто просмотра.
проблема, с которой я сталкиваюсь, связана с циклом for
* ngFor = "let type of widgetForm.get ('types'). value;
значения отображаются очень хорошо, но если я нажму кнопку редактирования, браузер зависнет, и в итоге мои поля ввода отобразятся, но я не могу редактироватьзначения в пределах их соответствующих полей
Если я изменю цикл for на этот
* ngFor = "let type of widgetForm.get ('types'). controls;
У меня нет отображаемых значений, но я могу нажать «Изменить» и отредактировать всю информацию.Так что я не уверен, как мне получить свой торт и съесть его ... в основном перебирая мой массив, чтобы отобразить его, затем отредактировать его
вот мой конструктор форм в ts
this.widgetService.getWidgetTypes(this.widget.type).subscribe(types => {
this.widgetTypes = types
let elements: FormGroup[]
for (let index = 0; index < this.widgetTypes .length; index++) {
const element = this.widgetTypes [index];
const controls = <FormArray>this.widgetForm.controls['types']
controls.push(
this.formBuilder.group({
item: [element.item, Validators.required],
amount: element.amount,
reason: element.reason
})
)
}
})
мой HTML выглядит так:
<div [formGroup]="widgetForm">
<div formArrayName="types" *ngFor="let type of widgetForm.get('types').value; let i = index;">
<div [formGroupName]="i" >
<ng-container *ngIf="readOnly[i]">
<div>
<dl>
<dt>Item:<dd>
<dd>{{ type.item }}<dd>
<dl>
<dl>
<dt>Amount:<dd>
<dd>{{ type.amount }}<dd>
<dl>
<dl>
<dt>Reason:<dd>
<dd>{{ type.reason }}<dd>
<dl>
<div>
<div><i class="icon-edit" (click)="editItem(i)"></i></div>
</ng-container>
<ng-container *ngIf="!readOnly[i]">
<div class="col">
<mat-form-field >
<input matInput placeholder="Item" formControlName="item"/>
</mat-form-field>
</div>
<div class="col">
<mat-form-field >
<input matInput placeholder="Amount" formControlName="amount"/>
</mat-form-field>
</div>
<div class="col">
<mat-form-field>
<mat-select placeholder="Reason" formControlName="reason">
<mat-option>{{ type.reason }}</mat-option>
<mat-option value="1">Duplicate Payment</mat-option>
<mat-option value="2">Incorrect Amount</mat-option>
<mat-option value="3">Lost/Stolen</mat-option>
<mat-option value="4">Expired</mat-option>
</mat-select>
</mat-form-field>
</div>
</ng-container>
</div>
</div>
</div>
Нужно ли делать что-то особенное, когда выбор матов находится во вложенной группе или что-то с помощью конструктора форм?