значения патча в formGroup с formArray в Angular? - PullRequest
1 голос
/ 19 сентября 2019

https://stackblitz.com/edit/angular-fzgtqc?file=src%2Fapp%2Fapp.component.ts Воспроизводимый пример .

Это пример данных, над которыми я работаю https://stackblitz.com/edit/angular-fzgtqc?file=SampleData

app.component.ts

editTrainner(trainner: Trainner) {
    this._trainnerservice.currentTrainner = Object.assign({}, trainner);
    this.registrationForm.patchValue({
          personal_details: { type: Object,
            name: { type: Object,
                first_name: this._trainnerservice.currentTrainner.personal_details.name.first_name,
                last_name: this._trainnerservice.currentTrainner.personal_details.name.last_name
            },
            dob: this._trainnerservice.currentTrainner.personal_details.dob,
            about_yourself: this._trainnerservice.currentTrainner.personal_details.about_yourself,
            languages_known: this.fb.array([this.addlanguages_known()]),
            willingly_to_travel: this._trainnerservice.currentTrainner.personal_details.willingly_to_travel
        }
    });
  }
  addlanguages_known(): any {
    const control = this.registrationForm.get('languages_known') as FormArray;
    this._trainnerservice.currentTrainner.personal_details.languages_known.forEach(x => {
        control.push(this.fb.control(''));
      });
  }

при выполнении кода появляется сообщение об ошибке: " Не удается прочитать свойство 'push' со значением NULL "

Я хочу вставить данные массива формы в форму, когдакнопка редактирования будет нажата пользователем.

1 Ответ

1 голос
/ 19 сентября 2019

Прежде всего, вы должны удалить функцию для установки значений из вашего бланка изнутри patchValue.Вместо этого вызовите функцию addlanguages_known(), как она есть.Тогда ваш путь к форуму неверен.Ваш formarray находится внутри personal_details, поэтому исправьте:

addlanguages_known(): any {
  const control = this.registrationForm.get('personal_details.languages_known') as FormArray;
  this._trainnerservice.currentTrainner.personal_details.languages_known.forEach(x => {
    control.push(this.fb.control(x));
  });
}

И, как уже упоминалось, удалите следующую строку из editTrainner():

languages_known: this.fb.array([this.addlanguages_known()]),

Ваш разветвленныйSTACKBLITZ

PS: Не связано, но вы используете какой-то общий тип Object, вы должны вводить данные в соответствии с моделью.

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