Saya memiliki beberapa komponen 2 sudut sederhana dengan template. Bagaimana cara menghapus formulir dan semua bidang setelah dikirim ?. Saya tidak dapat memuat ulang halaman. Setelah data set dengan date.setValue('')
field 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
}
}
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>
sumber
pristine
, ..., maka membangun kembali formulir saat ini adalah satu-satunya pilihan.setValue()
metode pengendalian. HanyaupdateValue()
github.com/angular/angular/blob/master/modules/angular2/src/…Pada Angular2 RC5,
myFormGroup.reset()
sepertinya berhasil.sumber
Untuk mengatur ulang formulir Anda setelah mengirimkan, Anda cukup memanggil
this.form.reset()
. Dengan memanggilnyareset()
akan:Silakan temukan permintaan tarik ini untuk jawaban terperinci. FYI, PR ini telah digabungkan menjadi 2.0.0.
Semoga ini dapat membantu dan beri tahu saya jika Anda memiliki pertanyaan lain terkait Formulir Angular2.
sumber
Lakukan Panggilan
clearForm();
di file .ts AndaCoba seperti potongan kode contoh di bawah ini untuk menghapus data formulir Anda.
sumber
sumber
Berikut adalah cara saya melakukannya di Angular 7.3
Tidak perlu menelepon
form.clearValidators()
sumber
Inilah cara saya melakukannya Angular 8:
Dapatkan referensi lokal untuk formulir Anda:
<form name="myForm" #myForm="ngForm"></form>
@ViewChild('myForm', {static: false}) myForm: NgForm;
Dan kapan pun Anda perlu mengatur ulang formulir,
resetForm
metode panggilan :this.myForm.resetForm();
Anda akan perlu
FormsModule
dari@angular/forms
untuk itu untuk bekerja. Pastikan untuk menambahkannya ke impor modul Anda.sumber
@ViewChild
di Angular 8 membutuhkan 2 argumen.@ViewChild('myForm', {static: false}) myForm: NgForm;
Untuk versi sudut 4, Anda dapat menggunakan ini:
Tapi, Anda mungkin membutuhkan nilai awal seperti:
Penting untuk menyelesaikan masalah nol dalam referensi objek Anda.
link referensi , Cari "setel ulang bendera formulir".
sumber
Ada diskusi baru tentang ini ( https://github.com/angular/angular/issues/4933 ). Sejauh ini hanya ada beberapa peretasan yang memungkinkan untuk menghapus formulir, seperti membuat ulang seluruh formulir setelah mengirimkan: https://embed.plnkr.co/kMPjjJ1TWuYGVNlnQXrU/
sumber
Saya menemukan solusi lain. Agak hacky tetapi tersedia secara luas di dunia angular2.
Karena direktif * ngIf menghapus formulir dan membuatnya kembali, seseorang cukup menambahkan * ngIf ke formulir dan mengikatnya ke beberapa jenis
formSuccessfullySent
variabel. => Ini akan membuat ulang formulir dan karena itu mengatur ulang status kontrol input.Tentu saja, Anda juga harus menghapus variabel model. Saya merasa nyaman memiliki kelas model khusus untuk bidang formulir saya. Dengan cara ini saya dapat mengatur ulang semua bidang sesederhana membuat instance baru dari kelas model ini. :)
sumber
querySelectorAll
inngAfterViewInit
. Saya menggunakan daftar ini untuk memfokuskan elemen input berikutnya pada keydown.enter, daripada mengirimkan formulir. Daftar ini terputus saat menggunakan ngIf untuk menginisialisasi ulang formulir. :(Hm, sekarang (23 Jan 2017 dengan angular 2.4.3) saya bikin seperti ini:
sumber
Kode di bawah ini berfungsi untuk saya di Angular 4
sumber
this.myForm.reset ();
Ini semua cukup ... Anda bisa mendapatkan hasil yang diinginkan
sumber
Untuk mengatur ulang formulir lengkap setelah pengiriman, Anda dapat menggunakan reset () di Angular. Contoh di bawah ini diterapkan di Angular 8. Di bawah ini adalah formulir Berlangganan di mana kami mengambil email sebagai input.
Lihat dokumen resmi: https://angular.io/guide/forms#show-and-hide-validation-error-messages .
sumber
sumber
object
kosong dan bukanform
.