Вот мой Stackblitz
У меня есть форма (EpisodicForm), которая создает документальный фильм с его сезонами и эпизодами для детей.
Я знаю, как добавлять сезоны и эпизодывручную с помощью следующего кода:
<code> <pre>{{data | json}}
Название Заголовок обязателен
Сезон {{i + 1}}:
Удалить сезон Удалить эпизод Название Добавить новый эпизод Добавить сезон
{{episodicForm.value | json}}
Есть функции addNewSeason и addNewEpisode. Обратите внимание в html-коде над способом добавления эпизодов: <button (click)="addNewEpisode(seas.controls.episodes)">Add new Episode</button>
seas.controls.episodes
Я хочу заполнить форму данными, полученными из IMDB, нов этом случае эти данные хранятся в переменной data.
Я знаю, как получить seasons
контроль при предварительном заполнении, но я не знаю, как получить контроль для эпизодов.
ngOnInit() {
this.documentary = new Object();
this.initEpisodicForm(this.data.documentary.seasons);
}
initEpisodicForm(seasons = null) {
let title = this.documentary.title;
this.episodicForm = this.fb.group({
'title': new FormControl(title, [Validators.required]),
'seasons': this.fb.array([], Validators.required)
});
if (seasons != null) {
seasons.forEach(season => {
console.log(season);
this.addNewSeason(season);
});
}
}
addNewSeason(season = null) {
let control = <FormArray>this.episodicForm.controls.seasons;
control.push(
this.fb.group({
'seasonNumber': new FormControl(this.seasonNumber, [Validators.required]),
'episodes': this.fb.array([], Validators.required)
})
);
this.seasonNumber++;
/**
* Tried these but didnt work
*/
//console.log(<FormArray>control.controls.episodes);
//console.log(control.get('episodes'));
//this.addNewEpisode(); //Don't know what to do here
}
addNewEpisode(control) {
control.push(
this.fb.group({
'episodeNumber': new FormControl(this.episodeNumber, [Validators.required]),
'title': new FormControl(title, [Validators.required])
}));
this.episodeNumber++;
}
ps Я относительно новичок в Angular, поэтому, если я не делаю это правильно, пожалуйста, сообщите. Спасибо