Je dois réinitialiser mon formulaire avec validation. Existe-t-il une méthode permettant de rétablir l'état de la forme de ng-dirty à ng-pristine?.
Il semble que cela ne soit pas encore supporté ... Une solution que j'ai déjà vue consiste à recréer le formulaire après l'envoi, ce qui est évidemment fastidieux et moche.
Voir également
Voici comment cela fonctionne actuellement avec Angular 4.1.0 - 5.1.3:
class YourComponent {
@ViewChild("yourForm")
yourForm: NgForm;
onSubmit(): void {
doYourThing();
// yourForm.reset(), yourForm.resetForm() don't work, but this does:
this.yourForm.form.markAsPristine();
this.yourForm.form.markAsUntouched();
this.yourForm.form.updateValueAndValidity();
}
}
from.resetForm ()
J'ai essayé à peu près tout, et la seule chose que j'ai trouvée qui réinitialise réellement formulaire.soumis à faux est la suivante:
Dans votre modèle, envoyez votre formulaire dans la fonction d'envoi:
<form name="form" class="form-horizontal" (ngSubmit)="f.form.valid && submit(f)" #f="ngForm" novalidate>
Dans votre fichier composant.ts, disposez des éléments suivants:
// import NgForm
import { NgForm } from '@angular/forms';
// get the passed in variable from the html file
submit(myForm: NgForm): void {
console.log(myForm.form.status, myForm.form.dirty, myForm.form.pristine, myForm.form.untouched, myForm.submitted, myForm.dirty, myForm.pristine, myForm.untouched);
// This is the key!
myForm.resetForm();
console.log(myForm.form.status, myForm.form.dirty, myForm.form.pristine, myForm.form.untouched, myForm.submitted, myForm.dirty, myForm.pristine, myForm.untouched);
}
Les valeurs du fichier console.log génèrent ce qui suit - notez qu'il réinitialise toutes les valeurs.
VALID vrai faux faux vrai vrai faux faux
INVALID faux vrai vrai faux faux vrai vrai
Je le fais dans RC.5, je définis mes éléments de formulaire dans un modèle.
<form (ngSubmit)="submit(); form.reset()" #form="ngForm">
Passer le formulaire à soumettre ou le regarder avec ViewChild
n'a pas fonctionné du tout, cela me suffit pour le moment.
Dans les versions les plus récentes (Angular 2.4.8 dans mon cas), c'est simple:
Marque un contrôle comme prédéfini et donc valide à nouveau.
private resetFormControlValidation(control: AbstractControl) {
control.markAsPristine();
control.markAsUntouched();
control.updateValueAndValidity();
}
À partir de Réponse de Benny Bottema , j’ai pu réinitialiser le formulaire, y compris les validations, à l’aide de resetForm () dans Angular 6.
class YourComponent {
@ViewChild("yourForm")
yourForm: NgForm;
onSubmit(): void {
doYourThing();
this.yourForm.resetForm();
}
}
si vous utilisez des formulaires gérés par des modèles, i.e ngFormModel, définir à nouveau le groupe de contrôle après la soumission résoudra cette question. Reportez-vous à ceci link
J'ai récemment examiné cette question car rien n'est encore intégré à Angular2 (mai 2016) à ce jour.
Considérant que l'utilisateur ne peut pas entrer 'indéfini' ou 'nul' et que la validation est principalement utilisée pour afficher les erreurs de formulaire à l'utilisateur, il suffit alors de réinitialiser les valeurs de contrôle à Null
myControl.updateValue(null);
Vous devrez ajouter cette condition pour décider d’afficher les erreurs de contrôle dans votre interface utilisateur en ajoutant simplement
if (myControl.value !== undefined && myControl.value !== null) {
//then there is reason to display an error
}
(cette vérification car Validators.Required traite le contenu vierge comme valide)
J'espère que cela t'aides.
Cela a fonctionné pour moi dans Angular 5
<form #myForm = "ngForm" (submit)="callMyAPI(); myForm.resetForm()">
Cela réinitialise les valeurs de formulaire et les validations.