J'ai déjà essayé de suivre l'exemple d'autres réponses d'ici et je n'ai pas réussi!
J'ai créé un formulaire réactif (c'est-à-dire dynamique) et je souhaite désactiver certains champs à tout moment. Mon code de formulaire:
this.form = this._fb.group({
name: ['', Validators.required],
options: this._fb.array([])
});
const control = <FormArray>this.form.controls['options'];
control.push(this._fb.group({
value: ['']
}));
mon html:
<div class='row' formArrayName="options">
<div *ngFor="let opt of form.controls.options.controls; let i=index">
<div [formGroupName]="i">
<select formArrayName="value">
<option></option>
<option>{{ opt.controls.value }}</option>
</select>
</div>
</div>
</div>
J'ai réduit le code pour faciliter. Je souhaite désactiver le champ de type select. J'ai essayé de faire ce qui suit:
form = new FormGroup({
first: new FormControl({value: '', disabled: true}, Validators.required),
});
Ca ne fonctionne pas! Quelqu'un a-t-il une suggestion?
first
? `:)value
n'est pas un formArray, c'est un formControlName. Si vous voulezvalue
être un formArray, vous devrez le changer. Actuellement, il s'agit d'un formControlName. Donc, si vous voulez que tout le champ de sélection soit désactivé,<select formArrayName="value">
<select formControlName="value">
Réponses:
ou
la source
if
instructions. Une fois le formulaire soumis, tout le formulaire est à nouveau désactivé.Faites attention
Si vous créez un formulaire en utilisant une variable pour condition et que vous essayez de le changer plus tard, cela ne fonctionnera pas, c'est -à- dire que le formulaire ne changera pas .
Par exemple
et si vous changez la variable
la forme ne changera pas. Tu devrais utiliser
BTW.
Vous devez utiliser la méthode patchValue pour changer la valeur:
la source
Il est déconseillé d'utiliser disable dans un DOM avec des formulaires réactifs. Vous pouvez définir cette option dans votre
FormControl
, lorsque vous lancez le depuisLa propriété
value
n'est pas nécessaireOu vous pouvez obtenir votre contrôle de formulaire avec
get('control_name')
et définirdisable
la source
It looks like you’re using the disabled attribute with a reactive form directive. If you set disabled to true when you set up this control in your component class, the disabled attribute will actually be set in the DOM for you. We recommend using this approach to avoid ‘changed after checked’ errors
. Donc, la méthode recommandée pour changer l'état de désactivation / activation directement via les commandes. Aussi, vous pouvez consulter ce grand sujet netbasal.comJe l'ai résolu en enveloppant mon objet d'entrée avec son étiquette dans un jeu de champs: le fieldset devrait avoir la propriété disabled liée au booléen
la source
Le
disabling
FormControlprevents
doit être présent dans un formulaire pendantsaving
. Vous pouvez simplement lui définir lareadonly
propriété.Et vous pouvez y parvenir de cette façon:
HTML:
TS:
Trouvé ceci ici
la source
form.getRawValue()
pour inclure les valeurs des contrôles désactivésSi vous souhaitez utiliser
disabled
des éléments d'entrée de formulaire (comme suggéré dans la réponse correcte, comment désactiver l'entrée ), la validation pour eux sera également désactivée, faites attention à cela!(Et si vous utilisez le bouton Soumettre,
[disabled]="!form.valid"
cela exclura votre champ de la validation)la source
Une approche plus générale serait.
la source
Si vous souhaitez désactiver
first
(formcontrol), vous pouvez utiliser l'instruction ci-dessous.this.form.first.disable();
la source
Cela a fonctionné pour moi:
this.form.get('first').disable({onlySelf: true});
la source
Ou formcontrol 'first'
Vous pouvez définir désactiver ou activer sur la configuration initiale.
la source
la source
La meilleure solution est ici:
https://netbasal.com/disabling-form-controls-when-working-with-reactive-forms-in-angular-549dd7b42110
Aperçu de la solution (en cas de lien rompu):
(1) Créer une directive
(2) Utilisez-le comme ça
(3) Étant donné que les entrées désactivées ne s'affichent pas dans form.value lors de la soumission, vous devrez peut-être utiliser les éléments suivants à la place (si nécessaire):
la source
this.form.get('FIELD_NAME').patchValue(DYNAMIC_VALUE)
, j'affiche le formControl. quand il est passé à la directive, il montre Impossible de lire la propriété 'disable' de undefinedJ'ai eu le même problème, mais appeler this.form.controls ['name']. Disable () ne l'a pas résolu car je rechargeais ma vue (en utilisant router.navigate ()).
Dans mon cas, j'ai dû réinitialiser mon formulaire avant de recharger:
this.form = indéfini; this.router.navigate ([chemin]);
la source
la source
Vous pouvez déclarer une fonction pour activer / désactiver tout le contrôle de formulaire:
et utilisez-le comme ça
la source
Pour rendre un champ de désactivation et permettre de angulaire de forme réactive 2+
1. Pour désactiver
<input class="form-control" name="Firstname" formControlName="firstname" [attr.disabled]="true">
Autoriser
Activer le formulaire entier
this.formname.enable();
Activer un champ particulier seul
this.formname.controls.firstname.enable();
Cela fonctionne très bien. Commentaire pour les requêtes.
la source