Using nested objects in FormBuilder
Asked Answered
S

1

19

So I have this form, and it works fine.. but now I would like to extend the json structure some...

https://plnkr.co/edit/aYaYTBRHekHzyS0M7HDM?p=preview

The new structure I want to use looks like this (only address: has changed):

  email: ['', [Validators.required, Validators.email]],
  password: ['', [Validators.required, Validators.minLength(5)]],
  address: this.fb.array([{
    name: '',
    addressLine1: ['', [Validators.required]],
    city: ['', [Validators.required]],
    postalCode: [Validators.required],
  }]),

But I keep getting errors like "ERROR TypeError: control.registerOnChange is not a function". Figured out that this has to do with formControlName missing but I don´t want all data do show..

In the input field I only want addressLine1 to show (not showing name, city, or postalCode at all).

Stunsail answered 1/6, 2017 at 12:1 Comment(3)
so when does fileds under address control are used ? thrown error because there is no formControl named address any more instead this is FormArrayCocoa
also i think you misunderstood with the use of FormArrayCocoa
I have updated the plunkr to show where it´s used later on..Stunsail
F
48

I would use a form group instead of a formarray for the address, so it would look like this instead:

this.registrationForm = fb.group({
  email: ['', [Validators.required, Validators.email]],
  password: ['', [Validators.required, Validators.minLength(5)]],
  address: this.fb.group({ // make a nested group
    name: '',
    addressLine1: ['', [Validators.required]],
    city: ['', [Validators.required]],
    postalCode: [Validators.required],
  }),
});

Then in your template, remember to mark the formGroupName:

<md-input-container formGroupName="address"> <!-- Mark the nested formgroup name -->
   <input mdInput type="text" placeholder="AddressLine1" name="address" 
         formControlName="addressLine1" fodiGoogleplace 
         (updateAdress)="setAdressOnChange($event)">
</md-input-container>

Your forked PLUNKER

Fourpence answered 1/6, 2017 at 13:40 Comment(2)
This is exactly what I ended up doing :)Stunsail
Awesome! Yeah, FormArray would be a good solution if you wanted to push several address-formgroups inside it. But glad the solution was satisfactory! Have nice day and happy coding! :)Fourpence

© 2022 - 2024 — McMap. All rights reserved.