Я хочу создать форму в Angular, которая может отправлять массив объектов.
В результате я хочу получить такой Json:
order = {
selectedDays: [{
meals: [
{name: 'breakfast',
selected: false},
{name: 'dinner',
selected: false},
{name: 'supper',
selected: false}
],
selectedDay: "10/01/2018"
}
]}
Однако у меня возникли некоторые проблемы с поиском элемента управления.Я получаю эту ошибку:
Ошибка: не удается найти элемент управления с путем: 'selectedDays -> 0 -> питание -> завтрак'
Вот мой код:
HTML:
Form values: {{form.value | json}}
И машинопись:
export class OrderFormComponent implements OnInit {
public form: FormGroup;
public availableMeals: string[] = [
"breakfast", "dinner", "supper"
];
order = {
selectedDays: [
{
meals: [
{name: 'breakfast',
selected: false},
{name: 'dinner',
selected: false},
{name: 'supper',
selected: false}
],
selectedDay: "10/01/2018"
}
]
}
constructor(private orderService: OrderService,
private formBuilder: FormBuilder) {
this.form = this.formBuilder.group({
selectedDays: this.formBuilder.array([])
})
this.setSelectedDays();
}
addNewDay() {
let control = <FormArray>this.form.controls.selectedDays;
control.push(
this.formBuilder.group({
meals: this.formBuilder.array([]),
selectedDate: new FormControl((new Date()))
})
)
}
setSelectedDays() {
let control = <FormArray>this.form.controls.selectedDays;
this.order.selectedDays.forEach(x => {
control.push(this.formBuilder.group({
meals: this.mapToCheckboxArrayGroup(this.availableMeals),
selectedDate: x.selectedDay
}))
})
}
submit() {
this.orderService.sendOrder(this.form.value).subscribe(() => {
console.log("Order added");
},
err => {
console.log('error occurred: ' + err.message);
}
);
}
private mapToCheckboxArrayGroup(data: string[]): FormArray {
return this.formBuilder.array(data.map((meal) => {
return this.formBuilder.group({
name: meal,
selected: false
});
}));
}
}
объект my Day.ts:
export interface Day {
meals: [
{name: 'breakfast',
selected: boolean},
{name: 'dinner',
selected: boolean},
{name: 'supper',
selected: boolean}
]
selectedDay: string;
}
Вероятно, есть кое-что, что я пропустил, однако я не могу решить это самостоятельно - я довольно плохо знаком с Angular.Буду благодарен за помощь!