I already tried to follow the example of other answers from here and I did not succeed!
I created a reactive form (ie, dynamic) and I want to disable some fields at
setTimeout(() => { emailGroup.disable(); });
The disabling
FormControl prevents
it to be present in a form while saving
. You can just set it the readonly
property.
And you can achieve it this way :
HTML :
<select formArrayName="value" [readonly] = "disableSelect">
TS :
this.disbaleSelect = true;
Found this here
You can declare a function to enable/disable all of the form control:
toggleDisableFormControl(value: Boolean, exclude = []) {
const state = value ? 'disable' : 'enable';
Object.keys(this.profileForm.controls).forEach((controlName) => {
if (!exclude.includes(controlName))
this.profileForm.controls[controlName][state]();
});
}
and use it like this
this.toggleDisableFormControl(true, ['email']);
// disbale all field but email
Pay attention
If you are creating a form using a variable for condition and trying to change it later it will not work, i.e. the form will not change.
For example
this.isDisabled = true;
this.cardForm = this.fb.group({
'number': [{value: null, disabled: this.isDisabled},
});
and if you change the variable
this.isDisabled = false;
the form will not change. You should use
this.cardForm.get('number').disable();
BTW.
You should use patchValue method for changing value:
this.cardForm.patchValue({
'number': '1703'
});