Angular 2 Превратить управление формой в группу форм позже - PullRequest
0 голосов
/ 14 января 2020

У меня есть массив форм с элементом управления, называемым «передний план», который начинается с нуля:

(<FormArray>this.myForm.get('rooms')).push(this.fBuilder.group({
                id: [element.id, [Validators.required]],
                background: null,
                foreground: null,
            }));

Но как я могу превратить его в группу форм с полями под ней позже? Я попробовал это:

room.controls.foreground(this.fBuilder.group({
                foregroundImageID: [null, [Validators.required]],
                foregroundImagePath: [null, [Validators.required]],
                foregroundXPosition: [null, [Validators.required]],
                foregroundYPosition: [null, [Validators.required]]
            }));

Ответы [ 2 ]

1 голос
/ 14 января 2020

Вы можете сделать это примерно так:

(<FormArray>this.myForm.get('rooms')).push(this.fBuilder.group({
    id: [element.id, [Validators.required]],
    background: null,
    foreground: null
}));

Теперь SetControl вот так -

this.myForm.controls.rooms['controls'][0].setControl('foreground', this.fBuilder.group({
      foregroundImageID: [null, [Validators.required]],
      foregroundImagePath: [null, [Validators.required]],
      foregroundXPosition: [null, [Validators.required]],
      foregroundYPosition: [null, [Validators.required]]
}));

Примечание: setControl заменяет существующий контроль. узнать больше о setControl

1 голос
/ 14 января 2020

Создайте свою форму следующим образом

(<FormArray>this.myForm.get('rooms')).push(this.fBuilder.group({
                id: [element.id, [Validators.required]],
                background: null,
                foreground: this.fBuilder.array([]),
            }));

Здесь и сейчас передний план работает как массив, с помощью которого вы можете поместить sh элементов на передний план

...