Dans angular 4 je crée un formulaire qui a un tableau de formulaires comme ça
this.formBuilder.group({
name: ['', [Validators.required, Validators.minLength(3)]],
required:false,
selectType: ['', [Validators.required]],
items: this.formBuilder.array([this.buildItems()])
})
...
buildItems() {
return this.formBuilder.group({
name: ['', [Validators.required]]
});
Cela crée le formulaire et je peux ajouter, etc., supprimer de ce formulaire et des éléments du formulaire. Ce que j'essaie maintenant de réaliser, c'est que lorsque le selectType
est égal à custom
(qui est défini comme une valeur de bouton radio sur le formulaire), alors je dois changer la validation des éléments name
et effacez ses exigences de validation.
J'ai fait un ensemble et mis à jour sur un autre formulaire comme ça
changeValidation() {
if(condition){
this.form.get('name').setValidators(Validators.required);
this.form.get('name').updateValueAndValidity();
}
}
Ce qui fonctionne bien, mais je ne sais pas comment mettre à jour les validations sur le tableau de formulaires. j'ai essayé
this.items.clearValidators();
this.items.updateValueAndValidity();
Je ne reçois aucune erreur mais cela ne fonctionne pas non plus. Quel type de sens parce que je ne cible pas un FormControl
spécifique, mais comment spécifier un FormControl
spécifique lorsque les FormControls
sont un tableau?
comment spécifier un FormControl spécifique lorsque les FormControls sont un tableau?
Vous devez utiliser la méthode at
décrite ici pour obtenir un seul contrôle:
this.items.at(0).clearValidators();
Si vous voulez effacer les validateurs du contrôle name
, faites comme ça:
this.items.at(0).controls.name.clearValidators();
Si vous souhaitez supprimer des validateurs pour chaque contrôle, il semble que le tableau de formulaires ne fournisse pas une telle API. Vous devez parcourir les contrôles du tableau de formulaires et supprimer les validateurs pour chaque contrôle:
this.items.controls.forEach(c => c.clearValidators());