Итерация по группе форм, содержащей форматы - PullRequest
0 голосов
/ 11 октября 2018

Я создаю управляемую моделью динамическую форму со следующей структурой:

export class AppComponent {

  data = {
    companies: [
      {
        company: "example comany",
        projects: [
          {
            projectName: "example project",
          }
        ]
      }
    ]
  }

  myForm: FormGroup;

  constructor(private fb: FormBuilder) {
    this.myForm = this.fb.group({
      companies: this.fb.array([])
    })

    this.setCompanies();
  }

  setCompanies() {
    let control = <FormArray>this.myForm.controls.companies;
    this.data.companies.forEach(x => {
      control.push(this.fb.group({ 
        company: x.company, 
        projects: this.setProjects(x) }))
    })
  }

  setProjects(x) {
    let arr = new FormArray([])
    x.projects.forEach(y => {
      arr.push(this.fb.group({ 
        projectName: y.projectName 
      }))
    })
    return arr;
  }
}

Ниже приведена структура модели, в наблюдаемой которой я получаю данные от серверной части:

export class Companies{
company : String;
companyRegNo : String;
projects : Project[];
}
export class Project{
projectName : String;
projectRegNo : String;
}

У меня есть некоторые данные json в моей переменной 'myForm' FormGroup, с информацией, содержащей company и projectName.Мне нужно внести некоторые изменения в этот json, но при этом иметь при себе оригинальные данные myForm json.

Следовательно, я создаю еще одну FormGroup переменную myForm2 и присваиваю ей значение myForm:

myForm2: FormGroup;
this.myForm2 = this.myForm;

Теперь я хочу, чтобы значение company было заменено значением companyRegNo, а значение projectName было заменено значением projectRegNo, сохраняя ключи company и projectNameостаться как есть, в myForm2.

У меня уже есть 2 метода, getProjectRegNoFromProjectName() и getCompanyRegNoFromCompanyName(), доступные со мной, которые возвращают projectRegNo и companyRegNo при прохождении projectName и company соответственно.Мне нужно вызвать оба этих метода во время итерации myForm2.Как теперь можно выполнить итерацию самих данных myForm2, чтобы я мог обновить назначенные атрибуты и значения FormArray, как указано выше?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Вы можете обратиться к этому простому моему примеру в массиве вложенных форм.

https://stackblitz.com/edit/nested-form-array-example?embed=1&file=src/app/app.component.ts

Не стесняйтесь спрашивать, если есть сомнения.

0 голосов
/ 11 октября 2018

Вы пробовали использовать patchValue?Что-то вроде:

(<any>Object).values(formGroup.controls).forEach(control => {
      control.patchValue(value);
//Patch Your value here}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...