So I have a complex form for creating an entity and I want to use it for editing as well I am using new angular forms API. I structured the form exactly as the data I retrieve from the database so I want to set the value of the whole form to the data retrieved here is an example to what i want to do:
this.form = builder.group({ b : [ "", Validators.required ], c : [ "", Validators.required ], d : [ "" ], e : [ [] ], f : [ "" ] }); this.form.value({b:"data",c:"data",d:"data",e:["data1","data2"],f:data});
PS: NgModel doesn't work with new forms api also i don't mind using one way data binding in template as in
<input formControlName="d" value="[data.d]" />
that works but it would be a pain in case of the arrays
We use the SetValue to update the FormControl , FormGroup or FormArray . When we use it to update the FormGroup or FormArray the SetValue requires that the object must match the structure of the FormGroup or FormArray exactly. Otherwise, it will result in an error.
Setting or Updating of Reactive Forms Form Control values can be done using both patchValue and setValue. However, it might be better to use patchValue in some instances. patchValue does not require all controls to be specified within the parameters in order to update/set the value of your Form Controls.
FormGroup valueChanges() and statusChanges() To track the value changes and status changes of a form control we need to listen them using subscribe() method. Find the code. In the above code name is the name of form control. Now we can use value changes and status changes to display on UI.
If we want to set a default value to our form control, we can pass a default value while instantiating a FormControl in our class. city = new FormControl('Noida'); married = new FormControl(true); In HTML template, we will use these properties with form control.
To set all FormGroup values use, setValue:
this.myFormGroup.setValue({ formControlName1: myValue1, formControlName2: myValue2 });
To set only some values, use patchValue:
this.myFormGroup.patchValue({ formControlName1: myValue1, // formControlName2: myValue2 (can be omitted) });
With this second technique, not all values need to be supplied and fields whos values were not set will not be affected.
You can use form.get to get the specific control object and use setValue
this.form.get(<formControlName>).setValue(<newValue>);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With