Comment marquer un contrôle Angular 2 comme sale dans mon code?
Quand je le fais comme ça:
control.dirty = true;
Je reçois cette erreur:
Cannot set property dirty of #<AbstractControl> which has only a getter
Vous devriez utiliser la méthode markAsDirty
, comme ceci:
control.markAsDirty();
Ceci marquera également tous les ancêtres directs comme étant sales pour maintenir le modèle.
Pour les formulaires basés sur des modèles, nous pouvons utiliser le code générique ci-dessous
public onSubmitForm(cardFormObject: NgForm) {
if (!cardFormObject.valid)
this.markAsDerty(cardFormObject);
}
private markAsDerty(cardFormObject: NgForm) {
for (var eachControl in cardFormObject.controls) {
(<FormControl>cardFormObject.controls[eachControl]).markAsDirty();
}
}
En supposant que vous appelez la méthode à partir de votre modèle en tant que:
<form #loginForm = "ngForm" (ngSubmit)="login(loginForm)"> ... </form>
Dans votre login.component.ts, utilisez ce qui suit
login(loginForm : any) {
//make sure that inputs are valid
if (loginForm.invalid) {
Object.keys( loginForm.controls).forEach(key => {
loginForm.controls[key].markAsDirty();
});
return;
}
}
Vous pouvez écrire une fonction personnalisée pour marquer tout les contrôles dans une FormGroup
comme touché/sale comme ceci:
markFormGroupTouched(formGroup: FormGroup) {
(<any>Object).values(formGroup.controls).forEach(control => {
control.markAsDirty(); // or control.markAsTouched();
});
}