Копировать значения динамической группы форм в класс данных в Angular [реактивные формы]

#angular #angular-reactive-forms #dynamicform

#angular #angular-реактивные-формы #dynamicform

Вопрос:

Я создал динамическую форму, используя реактивные формы в Angular.

Возможность удалять и создавать поля также динамически.

Но при попытке получить значения отправленной формы через onSubmit я получаю значения null в классах моделей.

     export class CreateListComponent implements OnInit {

       sdklist: FormGroup;

       ngOnInit() {
        this.sdklist = new FormGroup({
          SDKCollection: new FormArray([
            this.initFirstChild(),
          ]),
        });
      }

      initFirstChild() {
        return new FormGroup({
          sdkTitle: new FormControl(''),
          sdkId: new FormControl(''),
          sdkresourceId: new FormControl(''),
          sdkdescription: new FormControl(''),
          sdkimageName: new FormControl(''),
          ads: new FormArray([
           this.initSecondChild(),
          ]),
        });
      }

      private initSecondChild() {
        return new FormGroup({
         adTitle: new FormControl(''),
         adTag: new FormControl(''),
         });
      }
      onSubmit(form) {
        console.log('OnSubmit');
        console.log(this.sdklist.value);//Values are printed in console.

        var newSDKCollection : SDKCollection = this.sdklist.value;//SDKCollection is my data class

        console.log(newSDKCollection.sdkTitle);//value coming as null
        console.log(newSDKCollection.sdkId);//value coming as null

      }
    }

    //SDKCollection pojo
    export class SDKCollection{
      sdkTitle : string;
      sdkId : string;
      sdkresourceId : string;
      sdkdescription : string;
      ads : {
        [key : string] : ads
      }
    }

    //ads pojo
    export class ads{
      adTitle: string;
      adTag: string;
    }
  

Моя версия Angular выглядит следующим образом

введите описание изображения здесь

Поскольку я получаю значения ниже как null, я не могу отправить этот класс модели в свой серверный сервер и продолжить.

 console.log(newSDKCollection.sdkTitle);//value coming as null
console.log(newSDKCollection.sdkId);//value coming as null
  

Журнал консоли для this.sdklist.value показывает значения правильно:

введите описание изображения здесь

Чего мне не хватает!

Комментарии:

1. Попробуйте эти this.sdklist.value

2. Уже пробовал это. он не дает значений, отличных от null. за исключением печати в консоли

3. Попробуйте это.sdklist.getRawValue()

4. this.sdklist выглядит как массив. Итак, попробуйте foreach выполнить цикл newSDKCollection

Ответ №1:

Вы должны использовать this.sdklist.getRawValue() вместо this.sdklist.value .

Ответ №2:

Итак, я понял, что нужно сделать, чтобы решить эту проблему.

Я ввел новый объект того же целевого типа. И скопировал значения. Как следует, и смог продолжить.

 export class CreatesdklistComponent implements OnInit {
   ...
   sdklist: FormGroup;
   newSDKMainCollection : SDKMainCollection = {} as any;


   ...
    onSubmit() {
    console.log('OnSubmit');
    this.sdkCollectionModel = this.sdklist.get('SDKCollection').value;

    this.newSDKMainCollection.sdkCollectionName = this.sdkSetName;
    this.newSDKMainCollection.sdkCollection = this.sdkCollectionModel;

    //This displays all the required data correctly.
    console.log(this.newSDKMainCollection);
    }
}
  

Не уверен, почему это не сработало без введения нового объекта.
Сомневаюсь, что эта проблема была связана с созданием динамической формы.