J'ai un simple composant angulaire 2 avec un modèle. Comment effacer le formulaire et tous les champs après l'envoi?. Je ne peux pas recharger la page. Après avoir défini les données avec le date.setValue('')
champ est toujours touched
.
import {Component} from 'angular2/core';
import {FORM_DIRECTIVES, FormBuilder, ControlGroup, Validators, Control} from 'angular2/common';
@Component({
selector: 'loading-form',
templateUrl: 'app/loadings/loading-form.component.html',
directives: [FORM_DIRECTIVES]
})
export class LoadingFormComponent {
private form:ControlGroup;
private date:Control;
private capacity:Control;
constructor(private _loadingsService:LoadingsService, fb:FormBuilder) {
this.date = new Control('', Validators.required);
this.capacity = new Control('', Validators.required);
this.form = fb.group({
'date': this.date,
'capacity': this.capacity
});
}
onSubmit(value:any):void {
//send some data to backend
}
}
loading-form.component.html
<div class="card card-block">
<h3 class="card-title">Loading form</h3>
<form (ngSubmit)="onSubmit(form.value)" [ngFormModel]="form">
<fieldset class="form-group" [class.has-danger]="!date.valid && date.touched">
<label class="form-control-label" for="dateInput">Date</label>
<input type="text" class="form-control form-control-danger form-control-success" id="dateInput"
min="0" placeholder="Enter loading date"
[ngFormControl]="form.controls['date']">
</fieldset>
<fieldset class="form-group" [class.has-danger]="!capacity.valid && capacity.touched">
<label class="form-control-label" for="capacityInput">Capacity</label>
<input type="number" class="form-control form-control-danger form-control-success" id="capacityInput"
placeholder="Enter capacity"
[ngFormControl]="form.controls['capacity']">
</fieldset>
<button type="submit" class="btn btn-primary" [disabled]="!form.valid">Submit
</button>
</form>
</div>
la source
pristine
, ..., reconstruire le formulaire est actuellement la seule option.setValue()
méthode de contrôle. OnlyupdateValue()
github.com/angular/angular/blob/master/modules/angular2/src/…À partir d'Angular2 RC5,
myFormGroup.reset()
semble faire l'affaire.la source
Pour réinitialiser votre formulaire après l'avoir soumis, vous pouvez simplement appeler
this.form.reset()
. En l'appelantreset()
:Veuillez trouver cette pull request pour une réponse détaillée. Pour info, ce PR a déjà été fusionné avec 2.0.0.
J'espère que cela pourra être utile et faites-moi savoir si vous avez d'autres questions concernant les formulaires Angular2.
la source
Passer un appel
clearForm();
dans votre fichier .tsEssayez comme ci-dessous un exemple d'extrait de code pour effacer les données de votre formulaire.
la source
la source
Voici comment je le fais dans Angular 7.3
Il n'y avait pas besoin d'appeler
form.clearValidators()
la source
Voici comment je le fais Angular 8:
Obtenez une référence locale de votre formulaire:
<form name="myForm" #myForm="ngForm"></form>
@ViewChild('myForm', {static: false}) myForm: NgForm;
Et chaque fois que vous avez besoin de réinitialiser le formulaire, appelez la
resetForm
méthode:this.myForm.resetForm();
Vous aurez besoin
FormsModule
de@angular/forms
pour que cela fonctionne. Assurez-vous de l'ajouter à vos importations de modules.la source
@ViewChild
dans Angular 8 nécessite 2 arguments.@ViewChild('myForm', {static: false}) myForm: NgForm;
Pour la version angulaire 4, vous pouvez utiliser ceci:
Mais, vous pourriez avoir besoin d'une valeur initiale comme:
Il est important de résoudre le problème nul dans votre référence d'objet.
lien de référence , recherchez "réinitialiser les indicateurs de formulaire"
la source
Il y a une nouvelle discussion à ce sujet ( https://github.com/angular/angular/issues/4933 ). Jusqu'à présent, il n'y a que quelques hacks qui permettent d'effacer le formulaire, comme recréer le formulaire entier après l'avoir soumis: https://embed.plnkr.co/kMPjjJ1TWuYGVNlnQXrU/
la source
J'ai trouvé une autre solution. C'est un peu piraté mais largement disponible dans le monde angular2.
Puisque la directive * ngIf supprime le formulaire et le recrée, on peut simplement ajouter un * ngIf au formulaire et le lier à une sorte de
formSuccessfullySent
variable. => Cela recréera le formulaire et réinitialisera donc les états de contrôle d'entrée.Bien sûr, vous devez également effacer les variables du modèle. J'ai trouvé pratique d'avoir une classe de modèle spécifique pour mes champs de formulaire. De cette façon, je peux réinitialiser tous les champs simplement en créant une nouvelle instance de cette classe de modèle. :)
la source
querySelectorAll
inngAfterViewInit
. J'utilise cette liste pour concentrer le prochain élément d'entrée sur keydown.enter, au lieu de soumettre le formulaire. Cette liste est interrompue lors de l'utilisation de ngIf pour réinitialiser le formulaire. :(Hm, maintenant (23 janvier 2017 avec angulaire 2.4.3) je l'ai fait fonctionner comme ceci:
la source
Le code ci-dessous fonctionne pour moi dans Angular 4
la source
this.myForm.reset ();
Tout cela suffit ... Vous pouvez obtenir la sortie souhaitée
la source
Pour réinitialiser le formulaire complet lors de la soumission, vous pouvez utiliser reset () dans Angular. L'exemple ci-dessous est implémenté dans Angular 8. Vous trouverez ci-dessous un formulaire d'inscription où nous prenons le courrier électronique comme entrée.
Reportez-vous à la documentation officielle: https://angular.io/guide/forms#show-and-hide-validation-error-messages .
la source
la source
object
vide et non leform
.