Ich habe eine einfache eckige 2-Komponente mit Vorlage. Wie lösche ich das Formular und alle Felder nach dem Absenden? Ich kann die Seite nicht neu laden. Nach dem Einstellen der Daten mit date.setValue('')
Feld ist Stil 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
}
}
load-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>
quelle
pristine
, ..., ist die Neuerstellung des Formulars derzeit die einzige Option.setValue()
Kontrollmethode. NurupdateValue()
github.com/angular/angular/blob/master/modules/angular2/src/…Ab Angular2 RC5
myFormGroup.reset()
scheint der Trick zu tun.quelle
Um Ihr Formular nach dem Absenden zurückzusetzen, können Sie es einfach aufrufen
this.form.reset()
. Durch den Aufruf wirdreset()
es:In dieser Pull-Anfrage finden Sie eine detaillierte Antwort. Zu Ihrer Information, diese PR wurde bereits auf 2.0.0 zusammengeführt.
Hoffentlich kann dies hilfreich sein und mich wissen lassen, wenn Sie weitere Fragen zu Angular2 Forms haben.
quelle
Rufen Sie
clearForm();
in Ihrer .ts-Datei anVersuchen Sie es wie im folgenden Beispielcode-Snippet, um Ihre Formulardaten zu löschen.
quelle
quelle
So mache ich das in Angular 7.3
Es war nicht nötig anzurufen
form.clearValidators()
quelle
So mache ich es Angular 8:
Holen Sie sich eine lokale Referenz Ihres Formulars:
<form name="myForm" #myForm="ngForm"></form>
@ViewChild('myForm', {static: false}) myForm: NgForm;
Rufen Sie die
resetForm
Methode auf, wenn Sie das Formular zurücksetzen müssen :this.myForm.resetForm();
Sie benötigen
FormsModule
von,@angular/forms
damit es funktioniert. Stellen Sie sicher, dass Sie es zu Ihren Modulimporten hinzufügen.quelle
@ViewChild
in Winkel 8 benötigt 2 Argumente.@ViewChild('myForm', {static: false}) myForm: NgForm;
Für die eckige Version 4 können Sie Folgendes verwenden:
Möglicherweise benötigen Sie jedoch einen Anfangswert wie:
Es ist wichtig, das Nullproblem in Ihrer Objektreferenz zu beheben.
Referenz Link , Suche nach „Zurücksetzen der Form Flags“.
quelle
Es gibt eine neue Diskussion darüber ( https://github.com/angular/angular/issues/4933 ). Bisher gibt es nur einige Hacks, mit denen das Formular gelöscht werden kann, z. B. die Neuerstellung des gesamten Formulars nach dem Absenden: https://embed.plnkr.co/kMPjjJ1TWuYGVNlnQXrU/
quelle
Ich habe eine andere Lösung gefunden. Es ist ein bisschen hackig, aber in der Welt von angle2 weit verbreitet.
Da die Direktive * ngIf das Formular entfernt und neu erstellt, kann dem Formular einfach ein * ngIf hinzugefügt und an eine
formSuccessfullySent
Variable gebunden werden. => Dadurch wird das Formular neu erstellt und daher der Status der Eingabesteuerung zurückgesetzt.Natürlich müssen Sie auch die Modellvariablen löschen. Ich fand es praktisch, eine bestimmte Modellklasse für meine Formularfelder zu haben. Auf diese Weise kann ich alle Felder zurücksetzen, so einfach wie das Erstellen einer neuen Instanz dieser Modellklasse. :) :)
quelle
querySelectorAll
inngAfterViewInit
. Ich benutze diese Liste, um das nächste Eingabeelement auf keydown.enter zu fokussieren, anstatt das Formular zu senden. Diese Liste wird unterbrochen, wenn ngIf zum erneuten Initialisieren des Formulars verwendet wird. :(Hm, jetzt (23. Januar 2017 mit Winkel 2.4.3) habe ich es so gemacht:
quelle
Der folgende Code funktioniert für mich in Angular 4
quelle
this.myForm.reset ();
Das ist alles genug ... Sie können die gewünschte Ausgabe erhalten
quelle
Um das vollständige Formular beim Senden zurückzusetzen, können Sie reset () in Angular verwenden. Das folgende Beispiel ist in Angular 8 implementiert. Unten finden Sie ein Abonnementformular, in dem wir E-Mails als Eingabe verwenden.
Siehe offizielles Dokument: https://angular.io/guide/forms#show-and-hide-validation-error-messages .
quelle
quelle
object
leer und nicht dasform
.