Ini membuatku gila, aku di bawah pistol dan tidak mampu menghabiskan satu hari lagi untuk ini.
Saya mencoba untuk secara manual menetapkan nilai kontrol ('dept') di dalam komponen, dan itu tidak berfungsi - bahkan nilai baru log untuk menghibur dengan benar.
Berikut adalah Instance FormBuilder:
initForm() {
this.form = this.fb.group({
'name': ['', Validators.required],
'dept': ['', Validators.required],
'description': ['', Validators.required],
});
}
Ini adalah pengendali acara yang menerima departemen yang dipilih:
deptSelected(selected: { id: string; text: string }) {
console.log(selected) // Shows proper selection!
// This is how I am trying to set the value
this.form.controls['dept'].value = selected.id;
}
Sekarang ketika formulir dikirimkan dan saya logout this.form
lapangan masih kosong! Saya telah melihat penggunaan ppl lain updateValue()
tetapi ini adalah beta.1 dan saya tidak melihat itu sebagai metode yang valid untuk memanggil kontrol.
Saya juga mencoba menelepon updateValueAndValidity()
tanpa hasil :(.
Saya hanya akan menggunakan ngControl="dept"
pada elemen form, seperti yang saya lakukan dengan sisa form tetapi dengan direktif / komponen kustom.
<ng-select
[data]="dept"
[multiple]="false"
[items]="depts"
(selected)="deptSelected($event)" <!-- This is how the value gets to me -->
[placeholder]="'No Dept Selected'"></ng-select>
sumber
Jawaban:
Diperbarui: 19/03/2017
TUA:
Untuk saat ini kami dipaksa melakukan pemeran:
Saya tidak terlalu elegan. Semoga ini diperbaiki di versi mendatang.
sumber
(<Control>this.form.controls['dept']).setErrors(null)
this.form.get('dept').setValue(selected.id)
:)this.form.controls.dept.setValue(selected.id);
this.form.controls['dept'].setValue(selected.id);
Di Angular 2 Final (RC5 +) ada API baru untuk memperbarui nilai formulir. The
patchValue()
Metode API mendukung pembaruan bentuk parsial, di mana kita hanya perlu menentukan beberapa bidang:Ada juga
setValue()
metode API yang membutuhkan objek dengan semua bidang formulir. Jika ada bidang yang hilang, kami akan mendapatkan kesalahan.sumber
updateValue
(dari jawaban yang diterima oleh Filoche) sedang ditinggalkan demisetValue
updateValue()
dan memperkenalkanpatchValue
dansetValue
.Final Aangular 2 telah memperbarui API. Mereka telah menambahkan banyak metode untuk ini.
Untuk memperbarui kontrol bentuk dari pengontrol, lakukan ini:
Tidak perlu mengatur ulang kesalahan
Referensi
https://angular.io/docs/ts/latest/api/forms/index/FormControl-class.html
https://toddmotto.com/angular-2-form-controls-patch-value-set-value
sumber
setValue()
ketika dipanggil padaformGroup/formBuilder
, ia membutuhkan semua nilai di bawah formulir yang akan ditetapkan.patchValue()
, ketika dipanggil sama, dapat digunakan untuk memperbarui nilai tertentu.Anda bisa menggunakan metode berikut untuk memperbarui nilai kontrol formulir reaktif. Salah satu dari metode berikut ini sesuai dengan kebutuhan Anda.
Metode menggunakan setValue ()
Metode menggunakan patchValue ()
Metode terakhir akan mengulang semua kontrol dalam formulir sehingga tidak disukai saat memperbarui kontrol tunggal
Anda dapat menggunakan salah satu metode di dalam pengendali event
Anda dapat memperbarui beberapa kontrol dalam grup formulir jika perlu menggunakan
sumber
Anda bisa mencoba ini:
Untuk detail lebih lanjut, Anda bisa melihat pada JS Doc terkait mengenai parameter kedua
updateValue
metode: https://github.com/angular/angular/blob/master/modules/angular2/src/common/forms/model. ts # L269 .sumber
error TS2339: Property 'updateValue' does not exist on type 'AbstractControl'
. Dalam komponen itu, formulir memiliki tipeControlGroup
. Mungkin jika saya membuatnya secara individual dengannew Control()
ini akan berhasilTak satu pun dari ini bekerja untuk saya. Saya harus melakukan:
sumber
Jika Anda tidak ingin mengatur setiap bidang secara manual.
sumber
@ Diperbarui solusi Angular 2 Filoche's. Menggunakan
FormControl
(<Control>this.form.controls['dept']).updateValue(selected.id)
Atau Anda dapat menggunakan solusi @ AngularUniversity yang digunakan
patchValue
sumber
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.
jadi formulir kami adalah tipe objek FormGroup yang memiliki tiga FormControl .
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 ()
tetapi ketika Anda menggunakan setValue () Anda perlu memperbarui model lengkap karena secara ketat mematuhi struktur grup formulir. jadi, jika kita menulis
Kita harus melewati semua properti dari model grup formulir. seperti ini
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.
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.
Saya sarankan untuk melihat FormGroup API untuk mengetahui bagaimana semua properti dan metode FormGroup.
Tambahan : untuk mengetahui tentang pengambil lihat di sini
sumber
Jika Anda menggunakan kontrol formulir maka cara paling sederhana untuk melakukan ini:
sumber
Kiat: Jika Anda menggunakan
setValue
tetapi tidak memberikan setiap properti di formulir, Anda akan mendapatkan kesalahan:Must supply a value for form control with name: 'stateOrProvince'.
Jadi Anda mungkin tergoda untuk menggunakannya
patchValue
, tetapi ini bisa berbahaya jika Anda mencoba memperbarui seluruh formulir. Saya punyaaddress
yang mungkin tidak punyastateOrProvince
ataustateCd
bergantung pada apakah AS atau seluruh dunia.Sebagai gantinya, Anda dapat memperbarui seperti ini - yang akan menggunakan nulls sebagai default:
sumber