Jadi saya memiliki formulir kompleks untuk membuat entitas dan saya ingin menggunakannya untuk mengedit juga saya menggunakan API bentuk sudut baru. Saya menyusun formulir persis seperti data yang saya ambil dari database jadi saya ingin mengatur nilai seluruh formulir ke data yang diambil di sini adalah contoh untuk apa yang ingin saya lakukan:
this.form = builder.group({
b : [ "", Validators.required ],
c : [ "", Validators.required ],
d : [ "" ],
e : [ [] ],
f : [ "" ]
});
this.form.value({b:"data",c:"data",d:"data",e:["data1","data2"],f:data});
PS: NgModel tidak bekerja dengan api bentuk baru juga saya tidak keberatan menggunakan data satu cara mengikat di template seperti pada
<input formControlName="d" value="[data.d]" />
yang berfungsi tetapi akan merepotkan dalam kasus array
angular
angular2-forms
Amgad Serry
sumber
sumber
Jawaban:
Untuk mengatur semua nilai FormGroup gunakan, setValue :
Untuk menyetel hanya beberapa nilai, gunakan patchValue :
Dengan teknik kedua ini, tidak semua nilai perlu diberikan dan kolom yang nilainya tidak disetel tidak akan terpengaruh.
sumber
Untuk mengatur nilai ketika kontrol Anda adalah FormGroup dapat menggunakan contoh ini
sumber
Ya, Anda dapat menggunakan setValue untuk menyetel nilai untuk tujuan edit / perbarui.
Anda dapat merujuk http://musttoknow.com/use-angular-reactive-form-addinsert-update-data-using-setvalue-setpatch/ untuk memahami cara menggunakan formulir Reaktif untuk menambahkan / mengedit fitur dengan menggunakan setValue. Ini menghemat waktu saya
sumber
Anda bisa menggunakan form.get untuk mendapatkan objek kontrol spesifik dan menggunakan setValue
sumber
Seperti yang ditunjukkan dalam komentar, fitur ini tidak didukung pada saat pertanyaan ini diajukan. Masalah ini telah diatasi di angular 2 rc5
sumber
Saya telah menerapkan solusi sementara sampai bentuk dukungan angular2 updateValue
pemakaian:
catatan: formulir dan data harus memiliki struktur yang sama dan saya telah menggunakan lodash untuk deepcloning jQuery dan libs lain juga dapat melakukannya
sumber
Itu tidak benar. Anda hanya perlu menggunakannya dengan benar. Jika Anda menggunakan formulir reaktif, NgModel harus digunakan sesuai dengan petunjuk reaktif. Lihat contoh di sumber .
Meskipun sepertinya dari komentar TODO , ini mungkin akan dihapus dan diganti dengan API reaktif.
sumber
FormControlName
eksplisit menambahkannya sebagai file@Input()
. Lihat sumber yang saya tautkan. Jika penyeleksi negasi itu tidak ada di sana, maka dengan contoh di atas, sebuah NgModel akan dibuat, yang tidak Anda inginkan.FormControlDirective
([formControl]
) danFormControlName
(formControlName
), begitulah cara kerjanya. JikangModel
digunakan tanpa salah satu dari itu, maka diasumsikan Anda akan menggunakan bentuk deklaratif , dan anNgModel
dibuat. JikangModel
digunakan bersama salah satu reaktif arahan bentuk, maka yang reaktif bentuk direktif akan menangani model, bukanNgModel