Je crée une forme réactive dynamique dans Angular. Mais dans le niveau de code ci-dessous, le nom n'est pas accepté car le compilateur ne permet pas de donner une variable à l'intérieur du groupe (). Il n'autorise que des valeurs fixes telles que - état, ville, etc. au lieu de la variable level.name où level est un objet qui a un champ de nom ...
l2.push(this.formBuilder.group({ **State** : null --> No compilation error if we give fixed value }))
Dans la méthode de groupe, je veux donner le contrôle nom comme variable (niveau.nom). Dans la boucle for, si le niveau est {"name": "State", "id": 2} alors je veux le définir comme ci-dessous,
this.countryNextLevelsBeforeMan.forEach(**level** => { let l2 =<FormArray> this.l1FormGroup2.controls["l2"]; l2.push(this.formBuilder.group({ **level.name** : null --> compilation error on this line as variable not getting allowed })) });
(au lieu de ' State 'Je veux qu'il soit attribué dynamiquement par level.name car level.name peut être City, Street, etc.)
S'il vous plaît aider !!!
3 Réponses :
Remplacez la ligne ci-dessous par ...
level.name
à
niveau [nom]
Ça n'a pas marché. l2.push (this.formBuilder.group ({niveau [nom]: null}))
Faites comme ci-dessous .. this.formBuilder.addcontrol (level [name], new FormControl (null))
SuryaN, si vous souhaitez créer un FormGroup avec un "nom FormControl dynamique", utilisez la méthode addControl d'un FormGroup . Je suggère de créer une fonction qui renvoie un formGroup à partir d'un tableau de noms
const group=this.getFormGroup(this.countryNextLevelsBeforeMan.map(x=>x.name)) //make what ever you want with the FormGroup
Vous pouvez donc appeler la fonction comme
getFormGroup(names:string[]) { const group=new FormGroup({}) //<---create a formGroup empty names.ForEach(x=>{ group.AddControl(x,new FormControl()) }) return group; }
D'accord. Mais comme je l'ai fait, n'est-il pas possible de définir un nom de contrôle de formulaire dynamique?
Au fait, votre suggestion a également fonctionné. Merci pour la suggestion.
Essayez ceci:
this.countryNextLevelsBeforeMan.forEach(level => { let l2 =<FormArray> this.l1FormGroup2.controls["l2"]; l2.push(this.formBuilder.group({ [level.name]: null, [level.id]: [] })) });
c'est super! cela a fonctionné, pouvez-vous nous dire pourquoi est-il nécessaire d'utiliser des crochets?
Merci 👍✌ @Tecayehuatl. C'est la syntaxe pour générer une clé dynamique: vérifiez ceci pour plus d'informations: stackoverflow.com/questions/19837916/...
vous souhaitez définir la clé de contrôle de manière dynamique?
Oui, tu as raison