web-dev-qa-db-fra.com

Comment définir par programme un Angular 2 contrôle de forme à sale?

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
11
Eran Shabi

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.

Lien Docs

33
Eran Shabi

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();
        }
    }
0
Saravana Manikandan

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;
    }
}
0
Yazan Khalaileh

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();
    });
  }
0
BlackBeard