Сохранение 3 форм с одной отправкой Angular 10

Я пытаюсь сохранить 3 формы углового степпера одновременно, зная, что продукты (secondFormGroup) и значение ( ThirdFormGroup) могут содержать несколько строк

Модель API выглядит так:

{
  "product": [
    {
      "description": "string",
      "id": 0,
      "name": "string",
      "priority": 0,
      "store": {
      "id": 0,
      "name": "string",
      "type": "PROPERTIES",
      "version": 0
    },
    "values": [
      {
        "id": 0,
        "value": "string"
      }
     ]
    }
  ],
  "store": {
    "id": 0,
    "name": "string",
    "type": "PROPERTIES",
    "version": 0
  }
}

Это мой код

@Input() firstFormGroup!: FormGroup;
@Input() secondFormGroup!: FormGroup;
@Input() thirdFormGroup!: FormGroup;
@Input() products!: IProduct[];
@Input() values!: IValue[];

constructor(private _formBuilder: FormBuilder) {

  this.firstFormGroup = this._formBuilder.group({
   name: ['', Validators.required],
   type: ['', Validators.required],
  });


  this.secondFormGroup = this._formBuilder.group({
   name: ['', Validators.required],
   description: ['', Validators.required],
   priority: ['', Validators.required],
  });

  this.thirdFormGroup = this._formBuilder.group({
   value: [null, [Validators.required]],
  });

}

Это мой сервис:

createStore(storeInfo: IStore): Observable<EntityResponseType> {
  return this.http.post<IStore>(this.CSstoreUrl, storeInfo, { observe: 'response' });
 }

Если кто-нибудь может помочь, пожалуйста

У меня ошибка 400

Вот что показывает вкладка сети

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
Изучение Angular 1#
Изучение Angular 1#
Здравствуйте, друзья, как дела, надеюсь, у вас все хорошо.
0
0
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Почему бы не сгруппировать все ваши степперные формы в одну вложенную группу/массив с помощью formArray примерно так (пожалуйста, проверьте ссылки на документацию для полного правильного синтаксиса):

this.fullForm = this._formBuilder.group({ // will have structure of IStore
    store : this.firstFormGroup,
    product : this._formBuilder.array([ // matches the array of forms
        this._formBuilder.group({ 
            name: ['', Validators.required],
            description: ['', Validators.required],
            priority: ['', Validators.required],
            values: this._formBuilder.array([ // array in the array of forms
                this._formBuilder.control('', Validators.required)
            ])
        })
    ])
    
})

Таким образом, форма выведет объект значения, соответствующий ожидаемой структуре API.

this.fullForm.value // has structure of the forms (minus the disabled ones)
this.fullForm.valueChanges.subscribe(change => console.info(change)) // shows every value change

Чтобы отладить больше, вы также можете добавить это в свой шаблон:

<pre>{{fullForm.value | json}}</pre>

Спасибо за ответ, но моя проблема в том, как опубликовать его и сохранить в моей базе данных .. я получил ошибку 400 (неверный запрос)

symfony 20.12.2020 21:40

В этом случае вам нужно проверить, что вызывает 400, либо через вкладку сети в инструменте разработки браузера (проверьте также, что было отправлено), либо через трассировку стека бэкэнда.

Vincent AUDIBERT 21.12.2020 09:36

Я сохраняю форму следующим образом: const result = Object.assign({}, this.fullForm.value); this.storeService.createStore (результат); через вкладку сети я получил, что все поле остается пустым, я отредактировал свой пост, чтобы вы могли видеть, что показывает вкладка

symfony 21.12.2020 10:19

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