Как связать вложенный объект в форме?

Я привязываю данные, полученные от API, к форме следующим образом:

 // json data
 export class Recipe {
    _id: String;
    nome: String;
    tipo: Number;
    panetti: Number;
 }

 // ts (load data from API)
 this.form = this.fb.group({
    nome: [data.nome, [Validators.required]],
    tipo: [data.tipo, [Validators.required]],
    panetti: [data.panetti, [Validators.required]]
 });
 
 // component
 <mat-form-field>
    <input matInput type = "text" formControlName = "nome">
 </mat-form-field>

но как я могу сделать то же самое, если объект становится сложным? Такие как:

 // json data
 export class Recipe {
    _id: String;
    nome: String;
    tipo: Number;
    panetti: Number;
    ingredienti: {
        newField1: Number,
        newField2: Number,
        newArray: [
            {
                arrayField1: Number,
                arrayField2: Number
            }
        ];
    }
 }

как я могу связать в этом случае newField1 и newArray/arrayField*?

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
0
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для «ингредиенти» у вас будет другая группа форм. Что-то вроде

 this.form = this.fb.group({
  nome: [data.nome, [Validators.required]],
  tipo: [data.tipo, [Validators.required]],
  panetti: [data.panetti, [Validators.required]],
  ingredienti: this.fb.group({
    newField: ['initialValue'],
    secondField: ['initialValue'],
  })
});

И если у вас есть поле динамического массива, для «newArray» вы можете использовать FormArray. Посмотрите здесь https://angular.io/api/forms/FormArray.

Изменить для комментария Markzz: В теге формы html вы используете [formGroup]="form". Внутри него (где вы хотите отобразить остальные поля) вы используете «formGroupName». (в идеале использовать с ng-контейнером, потому что он не отображается в доме).

а для html части? я должен вставить форму в форму? :O не уверен, что это законно...

markzzz 18.03.2022 11:10

Вы не вставляете другую форму. Вы используете «formGroupName» с именем внутренней группы

Yozmo 18.03.2022 11:15

Пытался. Он говорит: «Нет экземпляра FormControl, прикрепленного к элементу управления формой с путем:« ingredienti -> acqua »», когда я отменяю выбор ввода

markzzz 18.03.2022 11:17

Тогда вы неправильно настраиваете форму. Приведенный выше пример должен работать без проблем.

Yozmo 18.03.2022 11:19

Другие вопросы по теме