Как получить доступ к элементу управления из массива - PullRequest
0 голосов
/ 05 ноября 2019

Вот мой 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, поэтому, если я не делаю это правильно, пожалуйста, сообщите. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...