J'ai remarqué que si je désactive un contrôle sur un formulaire réactif Angular 2, le contrôle n'est pas inclus dans le form.value. Par exemple, si je définis mon formulaire comme ci-dessous:
this.notelinkingForm = new FormGroup({
Enabled: new FormControl(settings.Enabled, Validators.required),
LinkToPreceeding: new FormControl({value: settings.LinkToPreceeding, disabled: !settings.Enabled}, Validators.required),
LinkingTolerance: new FormControl({value: settings.LinkingTolerance, disabled: !settings.Enabled}, Validators.required)
});
et vérifiez le this.notelinkingForm.value, si tous les contrôles sont activés, la sortie serait:
{"Enabled":true, "LinkToPreceeding": true, LinkingTolerance:"100"}
Cependant, lorsque certains des contrôles sont désactivés, ce serait:
{"Enabled":true}
Notez comment les contrôles désactivés sont exclus.
Mon intention est que lorsque le formulaire change, je souhaite pouvoir transmettre le formulaire form.value avec toutes les propriétés qu'il contient à mon API de repos. Cela ne sera évidemment pas possible s'il ne contient pas les éléments désactivés.
Est-ce que je manque quelque chose ici ou est-ce le comportement attendu? Existe-t-il un moyen de dire à Angular d'inclure les éléments désactivés dans le formulaire form.value?
Accueillez vos pensées.
la source
readonly
etdisabled
. Mais ce n'est pas le cas, par exemple, des cases à cocher et des boutons radio comme je l'ai décrit dans la réponse ci-dessous. Dans ces cas, je n'aimais pas que je doive obtenir les données différemment et coder quelque chose spécifiquement pour ce cas.Une autre option que j'utilise est:
this.form.controls['LinkToPreceeding'].value;
la source
Merci @Sasxa de m'avoir fourni 80% de ce dont j'avais besoin.
Pour ceux d'entre vous qui recherchent une solution au même problème mais pour les formulaires imbriqués que j'ai pu résoudre en changeant mon
à
la source
Si vous utilisez à la
readonly
place,disabled
il n'est toujours pas modifiable alors que les données seront incluses dans le formulaire. Mais ce n'est pas possible dans tous les cas. Par exemple, il n'est pas disponible pour les boutons radio et les cases à cocher. Consultez la documentation Web MDN . Dans ces cas, vous devez demander les autres solutions proposées ici.la source