Mam prosty komponent kątowy 2 z szablonem. Jak wyczyścić formularz i wszystkie pola po przesłaniu? Nie mogę ponownie załadować strony. Po ustawieniu danych z date.setValue('')
polem nadal 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>
źródło
pristine
, ... to przebudowanie formularza jest obecnie jedyną opcją.setValue()
metody kontroli. TylkoupdateValue()
github.com/angular/angular/blob/master/modules/angular2/src/…Od Angular2 RC5
myFormGroup.reset()
wydaje się , że załatwia sprawę .źródło
Aby zresetować formularz po przesłaniu, możesz po prostu wywołać
this.form.reset()
. Dzwoniąc doreset()
niej:Znajdź to żądanie ściągnięcia szczegółową odpowiedź, . FYI, ten PR został już połączony z wersją 2.0.0.
Mam nadzieję, że może to być pomocne i daj mi znać, jeśli masz inne pytania dotyczące Angular2 Forms.
źródło
Nawiąż połączenie
clearForm();
w pliku .tsSpróbuj jak poniżej przykładowy fragment kodu, aby wyczyścić dane formularza.
źródło
źródło
Oto jak to robię w Angular 7.3
Nie było potrzeby dzwonić
form.clearValidators()
źródło
Oto jak to robię Angular 8:
Uzyskaj lokalny numer referencyjny swojego formularza:
<form name="myForm" #myForm="ngForm"></form>
@ViewChild('myForm', {static: false}) myForm: NgForm;
A kiedy potrzebujesz zresetować formularz, wywołaj
resetForm
metodę:this.myForm.resetForm();
Aby to zadziałało, będziesz potrzebować
FormsModule
od@angular/forms
. Pamiętaj, aby dodać go do importu modułu.źródło
@ViewChild
w Angular 8 potrzebuje 2 argumentów.@ViewChild('myForm', {static: false}) myForm: NgForm;
W wersji kątowej 4 możesz użyć tego:
Ale możesz potrzebować wartości początkowej, takiej jak:
Ważne jest, aby rozwiązać problem zerowy w odwołaniu do obiektu.
odnośnik do odnośnika , Wyszukaj hasło „resetuj flagi formularza”.
źródło
Jest nowa dyskusja na ten temat ( https://github.com/angular/angular/issues/4933 ). Na razie jest tylko kilka hacków, które pozwalają wyczyścić formularz, jak odtworzenie całego formularza po przesłaniu: https://embed.plnkr.co/kMPjjJ1TWuYGVNlnQXrU/
źródło
Znalazłem inne rozwiązanie. Jest trochę hacky, ale jest szeroko dostępny w świecie angular2.
Ponieważ dyrektywa * ngIf usuwa formularz i odtwarza go, można po prostu dodać * ngIf do formularza i powiązać go z jakimś rodzajem
formSuccessfullySent
zmienną. => Spowoduje to odtworzenie formularza i tym samym zresetuje stany sterowania wejściami.Oczywiście musisz również wyczyścić zmienne modelu. Uważam, że wygodnie jest mieć określoną klasę modelu dla moich pól formularza. W ten sposób mogę zresetować wszystkie pola tak proste, jak utworzenie nowej instancji tej klasy modelu. :)
źródło
querySelectorAll
wngAfterViewInit
. Używam tej listy, aby skupić się na następnym elemencie wejściowym na keydown.enter, zamiast przesyłać formularz. Ta lista nie działa, gdy używasz ngIf do ponownej inicjalizacji formularza. :(Hm, teraz (23 stycznia 2017 z kątowym 2.4.3) zrobiłem to tak:
źródło
Poniższy kod działa u mnie w Angular 4
źródło
this.myForm.reset ();
To wystarczy ... Możesz uzyskać pożądany efekt
źródło
Aby zresetować cały formularz po przesłaniu, możesz użyć reset () w Angular. Poniższy przykład jest zaimplementowany w Angular 8. Poniżej znajduje się formularz subskrypcji, w którym przyjmujemy e-mail jako dane wejściowe.
Zobacz oficjalny dokument: https://angular.io/guide/forms#show-and-hide-validation-error-messages .
źródło
źródło
object
puste, a nieform
.