Создайте всю форму с помощью FormBuilder
. Кроме того, мне нравится разделять лог c создания объекта и его форму в другом классе, чтобы вы могли их повторно использовать, и не забывайте, что ваши интерфейсы всегда должны быть на месте:
// participant.ts
export interface Participant {
ocupation: string;
ocupationAddress: string;
symptoms: Symptom[];
}
// symptom.ts
export interface Symptom {
id: number;
value: string;
selected: boolean;
}
// symptoms-builder.ts
export class SymptomsBuilder {
static buildForm(fb: FormBuilder, symptom: Symptom) {
return fb.group({
id: fb.control(symptom.id),
value: fb.control(symptom.value),
selected: fb.control(false)
});
}
}
// participant-builder.ts
export class ParticipantBuilder {
static buildForm(fb: FormBuilder, symptoms: Symptom[]) {
return fb.group({
occupation: fb.control('', [Validators.required]),
occupationAddress: fb.control('', [Validators.required]),
symptoms: fb.array(symptoms ? symptoms.map(s => SymptomsBuilder.buildForm(fb, s)) : [])
});
}
}
Итак, в ваш компонент, вам нужно только инициализировать форму участника:
this.participantForm = ParticipantBuilder.buildForm(this.fb, symptoms);
Когда форма заполнена, вы можете получить данные с помощью this.participantForm.value
, и это будет тип Participant
:
{
"occupation": "2",
"occupationAddress": "B23 IND",
"symptoms": [
{
"id": 8651,
"value": "Abdominal pain",
"selected": false
},
{
"id": 8646,
"value": "Chest pain",
"selected": true
},
{
"id": 8642,
"value": "Cough",
"selected": true
}
]
}