web-dev-qa-db-fra.com

Comment définir un formulaire comme vierge?

  • Le formulaire qui représente l'état de l'entité est en cours de modification (se salit)
  • Le formulaire est en cours de soumission et l'état de l'entité est maintenant aligné sur l'état du formulaire, ce qui signifie que le formulaire doit maintenant être défini comme étant vierge.

Comment fait-on cela? Il y avait $setPristine() dans ng1 . Btw, je parle du type de formulaire ControlGroup.

17
Birowsky

Il y a la méthode markAsPristine (elle semble non documentée pour l'instant, mais peut être trouvée ici: https://github.com/angular/angular/blob/53f0c2206df6a5f8ee03d611a7563ca1a78cc82d/tools/public_apard_forms/index.d ). 

En gros, this.form.markAsPristine() fait ce que vous attendez.

28
Christophe Vidal

mettre à jour

Dans le nouveau module de formulaires, cela a été beaucoup amélioré.

AbstractControl , la classe de base de la plupart des classes de formulaire fournit

markAsTouched({onlySelf}?: {onlySelf?: boolean}) : void
markAsUntouched({onlySelf}?: {onlySelf?: boolean}) : void
markAsDirty({onlySelf}?: {onlySelf?: boolean}) : void
markAsPristine({onlySelf}?: {onlySelf?: boolean}) : void
markAsPending({onlySelf}?: {onlySelf?: boolean}) : void

Et plusieurs autres nouvelles méthodes 

disable({onlySelf, emitEvent}?: {onlySelf?: boolean, emitEvent?: boolean}) : void
enable({onlySelf, emitEvent}?: {onlySelf?: boolean, emitEvent?: boolean}) : void
setValue(value: any, options?: Object) : void
patchValue(value: any, options?: Object) : void
reset(value?: any, options?: Object) : void
updateValueAndValidity({onlySelf, emitEvent}?: {onlySelf?: boolean,  emitEvent?: boolean}) : void // (old)
setErrors(errors: {[key: string]: any}, {emitEvent}?: {emitEvent?: boolean}) : void

original

Ce n'est actuellement pas pris en charge. Voir https://github.com/angular/angular/issues/5568 et https://github.com/angular/angular/issues/4933 . La solution habituelle consiste à recréer le formulaire pour en obtenir un vierge.

11
class MyComp {
   form = new FormGroup({
      first: new FormControl('Nancy'),
      last: new FormControl('Drew')
   });
}

   reset() {
      this.form.reset();  // will reset to null
     // this.form.reset({first: 'Nancy', last: 'Drew'});   -- will reset to value specified
   }

https://github.com/angular/angular/pull/9974

Cela apparaîtra dans rc5 ou plus tard.

0
Derek Kite