Конвертировать объект в FormGroup с вложенными FormArrays в угловых реактивных форм - PullRequest
0 голосов
/ 04 июля 2018

Я получаю очень сложный объект json из бэкэнда, который содержит массивы в качестве ключевых значений, например:

[
  id: 1
  persons: [
    {
      name: 'Name',
      property: [ ..... ]
    }
    .........
  ]
]

Мне нужно заполнить этот объект в моей Реактивной форме. Поэтому в моей функции ngOnInit я инициализирую форму и получаю данные массива из сервиса. Затем я передаю эти данные в функцию convertToFormGroup для создания этого вложенного FormArrays из простого объекта. Проблема с этой функцией в том, что она работает только на один уровень. Я боюсь, что API может измениться в будущем, и мне понадобится другой FormArray внутри FormArray? Я думаю, что это совершенно неправильный подход? И это должно быть проще для преобразования объекта с вложенными массивами в FormGroup с вложенными FormArrays. У нас есть какая-то существующая функция для этого? Я новичок в Angular, поэтому не стесняйтесь критиковать меня.

ngOnInit() {
  this.form = this.fb.group({
    data: this.fb.array([]),
  })

  this.service.getData().subscribe(data => {
    const convertedData = convertToFormGroup(data);
    (this.form.get('data') as FormArray).push(convertedData);
  });
}

private convertToFormGroup(object) {
  const newObj = {};
  Object.keys(object).map(key => {
    if (Array.isArray(object[key])) {
      newObj[key] = this.fb.array([]);
      for(const value of object[key]) {
        newObj[key].push(this.fb.group(value));
      }
    } else {
      newObj[key] = object[key];
    }
  });
  return this.fb.group(newObj);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...