Saya tahu jawabannya sudah diberikan tetapi saya ingin memberikan jawaban singkat bagaimana cara memperbarui nilai formulir sehingga pendatang baru lainnya bisa mendapatkan ide yang jelas.
struktur formulir Anda sangat sempurna untuk digunakan sebagai contoh. jadi, sepanjang jawaban saya, saya akan menyatakannya sebagai formulir.
this.form = this.fb.group({
'name': ['', Validators.required],
'dept': ['', Validators.required],
'description': ['', Validators.required]
});
jadi formulir kami adalah tipe objek FormGroup yang memiliki tiga FormControl .
Ada dua cara untuk memperbarui nilai model:
Gunakan metode setValue () untuk menetapkan nilai baru untuk kontrol individu. Metode setValue () secara ketat mematuhi struktur grup formulir dan mengganti seluruh nilai untuk kontrol.
Gunakan metode patchValue () untuk mengganti properti yang didefinisikan dalam objek yang telah berubah dalam model formulir.
Pemeriksaan ketat metode setValue () membantu menangkap kesalahan bersarang dalam bentuk kompleks, sementara patchValue () gagal secara diam-diam pada kesalahan tersebut.
Dari dokumentasi resmi Angular di sini
jadi, Saat memperbarui nilai untuk contoh grup formulir yang berisi beberapa kontrol, tetapi Anda mungkin hanya ingin memperbarui bagian model. patchValue () adalah yang Anda cari.
mari kita lihat contohnya. Ketika Anda menggunakan patchValue ()
this.form.patchValue({
dept: 1
});
//here we are just updating only dept field and it will work.
tetapi ketika Anda menggunakan setValue () Anda perlu memperbarui model lengkap karena secara ketat mematuhi struktur grup formulir. jadi, jika kita menulis
this.form.setValue({
dept: 1
});
// it will throw error.
Kita harus melewati semua properti dari model grup formulir. seperti ini
this.form.setValue({
name: 'Mr. Bean'
dept: 1,
description: 'spome description'
});
tapi saya tidak sering menggunakan gaya ini. Saya lebih suka menggunakan pendekatan berikut yang membantu menjaga kode saya lebih bersih dan lebih mudah dipahami.
Apa yang saya lakukan adalah, saya mendeklarasikan semua kontrol sebagai variabel terpisah dan menggunakan setValue () untuk memperbarui kontrol tertentu.
untuk bentuk di atas, saya akan melakukan sesuatu seperti ini.
get companyIdentifier(): FormControl {
return this.form.get('name') as FormControl;
}
get dept(): FormControl {
return this.form.get('dept') as FormControl;
}
get description(): FormControl {
return this.form.get('description') as FormControl;
}
ketika Anda perlu memperbarui kontrol formulir gunakan saja properti itu untuk memperbaruinya. Dalam contoh, penanya mencoba memperbarui kontrol formulir dept ketika pengguna memilih item dari daftar turun bawah.
deptSelected(selected: { id: string; text: string }) {
console.log(selected) // Shows proper selection!
// instead of using this.form.controls['dept'].setValue(selected.id), I prefer the following.
this.dept.setValue(selected.id); // this.dept is the property that returns the 'dept' FormControl of the form.
}
Saya sarankan untuk melihat FormGroup API untuk mengetahui bagaimana semua properti dan metode FormGroup.
Tambahan : untuk mengetahui tentang pengambil lihat di sini