J'ai un contrôle de sélection que je veux désactiver dynamiquement en fonction d'une condition:
this.activityForm = this.formBuilder.group({
docType: [{ value: '2', disabled: this.activeCategory != 'document' }, Validators.required]
});
Cependant, docType n'est pas activé, même si, à un moment donné, this.activeCategory devient "document".
Comment puis-je réparer ça?
Puisque je ne sais pas comment vous manipulez activeCategory
(c'est peut-être aussi un FormControl
?), Je suggérerais l'approche suivante:
Vous pouvez utiliser (change)
pour détecter quand this.activeCategory
a changé, comme ci-dessous:
1 - Si vous utilisez ngModel
:
<input type="text" [(ngModel)]="activeCategory" (change)="checkValue($event)">
2 - Si c'est un FormControl
:
<input type="text" formControlName="activeCategory" (change)="checkValue($event)">
Ainsi, en composant, vous pouvez manipuler le docType
contrôle en utilisant disable/enable
méthodes:
checkValue(event: Event) {
const ctrl = this.activityForm.get('docType');
if (event.value === 'document') {
ctrl.enable();
} else {
ctrl.disable();
}
}
Vous devez gérer les éléments sélectionnés différemment des autres éléments HTML. Vous devrez effectuer une réinitialisation lorsque this.activeCategory
Sera modifié.
Quelque chose comme ça:
this.activityForm.controls['docType'].reset({ value: '2', disabled: false });
Bien sûr, vous voudrez probablement utiliser la valeur actuelle plutôt qu'un code codé en dur '2'
.
Même chose pour le désactiver, si besoin est (et ce sera probablement le cas).
this.activityForm.controls['docType'].reset({ value: '2', disabled: true });
Plus d'informations sur ng form control reset .
this.activityForm.controls ['docType']. disable ();