У меня есть массив Observables, который я показываю через асинхронный канал Angular в форме. Массив devices$
динамический, я добавляю в него элементы по нажатию кнопки.
<form [formGroup]="devices_form" (ngSubmit)="submitForm()">
<div *ngFor="let device of devices$">
<div *ngIf="device | async as device">
<input value="{{ device.name }}">
<input value="{{ device.type }}">
</div>
</div>
</form>
Теперь мне нужно отправить данные (name
и т.д.) devices$
через Angular FormBuilder. Думаю, мне нужно сначала отобразить/перебрать массив devices$
, подписаться на его элементы и отправить результаты в поле FormGroup.
Хотя я сбит с толку, потому что мои Observables, конечно, асинхронны, и при отправке формы я должен убедиться, что мои данные полны, если это имеет смысл. До сих пор я не подписывался вручную на Observables в своем коде TypeScript.
Вот мой упрощенный код:
// Interface of device
export interface Device {
name: string,
type: string
}
// Devices form I need to submit
this.devices_form = this.formBuilder.group({
devices: ['', Validators.required]
});
// Submit form if valid
submitForm() {
// I guess I need to set the devices value here
this.devices_form.get('devices').setValue('array data here...');
if (this.devices_form.valid) {
this.saveData(this.devices_form.value);
}
}
Я уже пробовал отображать devices$
, подписываясь на его элементы и добавляя это в FormGroup. Хотя, поскольку это асинхронные данные, они не работали должным образом (поскольку подписка никогда не «заканчивается», я не получил правильное количество элементов). Я также играл с FormArray (из Angular), но безуспешно.
Кто-нибудь знает, как объединить асинхронный код с массивом Observables и Angular FormBuilder?
Заранее спасибо!