J'ai le suivant form
dans Angular créé avec FormBuilder
:
constructor(private fb: FormBuilder) {
this.myForm = fb.group({
'name': ['', [Validators.required],
'surname': ['', [Validators.required],
'email': ['', [validateEmail]],
'address': fb.group({
'street': [''],
'housenumber': [''],
'postcode': ['']
}, { validator: fullAddressValidator })
});
}
Existe-t-il un moyen d'ajouter par programme de nouveaux champs tels que FormControl
ou de nouveaux FormGroup
à myForm
?
Je veux dire que si je veux ajouter de nouveaux champs à la demande ou à certaines conditions, comment ajouter des éléments au même formulaire créé la première fois dans le constructor
?
Vous pouvez utiliser la méthode addControl
de FormGroup classe selon documentation
Donc, vous pouvez faire comme ci-dessous:
this.myForm.addControl('newcontrol',[]);
Pour ajouter ce que @ ranakrunal9 a dit.
Si vous souhaitez utiliser des validateurs avec addControl, procédez comme suit:
this.myForm.addControl('newControl', new FormControl('', Validators.required));
N'oubliez pas d'ajouter l'importation suivante
import {FormControl} from "@angular/forms";
Référence à addControl: https://angular.io/api/forms/FormGroup#addControl
Référence à FormControl: https://angular.io/api/forms/FormControl
À mon avis, vous pourriez simplement utiliser une variable intermédiaire à cette fin. Jetez un oeil à l'exemple suivant:
constructor(private fb: FormBuilder) {
let group = {
'name': ['', [Validators.required]],
'surname': ['', [Validators.required]],
'email': ['', [Validators.required]]
};
let middlename = true;
if(middlename) {
group['middlename'] = ['', [Validators.required]];
}
this.myForm = fb.group(group);
}
En outre, il serait préférable de transférer une initiation de formulaire dans un hook ngOnInit, au lieu d'un constructeur de composant.