J'utilise FormBuilder pour construire un formulaire:Comment ajouter dynamiquement des validateurs aux formulaires dans Angular 2 - 4 en utilisant FormBuilder?
this.myForm = this.fb.group({
'name': new FormControl(null, Validators.min(5)),
'description': new FormControl(null, Validators.min(60))
});
Le problème est que je dois aussi valider si elle est nécessaire et je l'obtenir de la configuration par une carte construite comme ceci:
map = new Map<string, boolean>();
map.set('name', true);
map.set('description', false);
Le problème peut être résolu comme suit:
this.myForm = this.fb.group({
'name': this.map.get('name') ? new FormControl(null, Validators.compose([Validators.required, Validators.min(5)])) : new FormControl(null, Validators.min(5)),
'description': this.map.get('description') ? new FormControl(null, Validators.compose([Validators.required, Validators.min(60)])) : new FormControl(null, Validators.min(60))
});
qui fonctionne imaginer, mais dans une grande application avec plusieurs formes avec beaucoup de champs réels est inconfortable de cette façon de le faire. Idéalement, cela ressemblerait à ceci:
Object.keys(this.myForm.controls).forEach(key => {
if (map.get(key)) {
this.myForm.get(key).setValidators(this.myForm.get(key).getValidators().push(Validators.required))
}
});
Bien sûr, cela ne fonctionne pas. Donc, si quelqu'un qui a déjà résolu cela ou a un bon moyen de faire ce qui est décrit ci-dessus, je vais vous remercier beaucoup. Merci d'avance!!!
Mise à jour: Le problème peut être réduit à "comment obtenir tous les validateurs associés à un FormControl". Je ne pense pas qu'il y ait une solution définitive à cette question ->https://github.com/angular/angular/issues/13461
pourquoi cette méthode ne fonctionne pas? –
La méthode .getValidators() n'existe pas dans Angular 2 - 4, ou du moins je n'ai pas trouvé quelque chose de similaire. Cependant, si une méthode .setValidators() existe dans Angular 2 - 4. –
vérifiez ma réponse –