Ini HTML saya:
<input id="selectedDueDate" type="text" ng-model="selectedDate" />
Saat saya mengetik ke dalam kotak, model diperbarui melalui mekanisme pengikatan 2 arah. Manis.
Namun ketika saya melakukan ini melalui JQuery ...
$('#selectedDueDate').val(dateText);
Itu tidak memperbarui model. Mengapa?
Jawaban:
Angular tidak tahu tentang perubahan itu. Untuk ini, Anda harus memanggil
$scope.$digest()
atau membuat perubahan di dalam$scope.$apply()
:Lihat ini untuk lebih memahami pemeriksaan kotor
UPDATE : Berikut adalah contohnya
sumber
function
$ scope. $ Apply dengan meneruskan fungsi sebagai argumen. Dan $ apply harus dipanggil ketika Anda akan membuat perubahan pada $ scope, jadi, di dalam onSelect. Ah, saya berharap Anda meletakkan manipulasi DOM di dalam pengontrol hanya sebagai contoh, dalam aplikasi nyata ini salah;)datepicker="scopeKeyThatYouWant"
masukan sederhanaGunakan saja;
sumber
trigger('input')
datepicker dalamonSelect
acara tersebut. Ini memperbarui nilai dengan benar..val('something'
panggilan dalam$apply
(atau menelepon$digest
sesudahnya) tidak berfungsi.$('#selectedDueDate').val(dateText).trigger('change');
yang tidak bekerja untuk saya..trigger('input');
bekerja seperti sulapSaya telah menemukan bahwa jika Anda tidak menempatkan variabel secara langsung terhadap ruang lingkup, itu akan diperbarui dengan lebih andal.
Coba gunakan beberapa "dateObj.selectedDate" dan di pengontrol tambahkan selectedDate ke objek dateObj sebagai berikut:
Ini berhasil untuk saya.
sumber
Coba ini
sumber
Jalankan saja baris berikut di akhir fungsi Anda:
$ scope. $ apply ()
sumber
Apapun yang terjadi di luar Scope of Angular, Angular tidak akan pernah tahu itu.
Siklus digest menempatkan perubahan dari model -> controller dan kemudian dari controller -> model.
Jika Anda perlu melihat Model terbaru, Anda perlu memicu siklus intisari
Tetapi ada kemungkinan siklus intisari sedang berlangsung, jadi kita perlu memeriksa dan memulai siklus tersebut.
Lebih disukai, selalu lakukan aplikasi yang aman.
sumber
AngularJS melewatkan string, angka, dan boolean berdasarkan nilai saat ia melewati array dan objek dengan referensi. Jadi Anda bisa membuat objek kosong dan menjadikan tanggal Anda sebagai properti dari objek itu. Dengan cara itu angular akan mendeteksi perubahan model.
Dalam pengontrol
Dalam html
sumber
Anda harus memicu peristiwa perubahan elemen masukan karena ng-model mendengarkan peristiwa masukan dan cakupan akan diperbarui. Namun, pemicu jQuery biasa tidak berfungsi untuk saya. Tapi inilah yang berfungsi seperti pesona
Mengikuti tidak berhasil
Anda dapat membaca lebih lanjut tentang membuat dan mengirimkan peristiwa sintetis .
sumber
Saya telah menulis plugin kecil ini untuk jQuery yang akan membuat semua panggilan untuk
.val(value)
memperbarui elemen sudut jika ada:Cukup masukkan skrip ini setelah jQuery dan angular.js dan
val(value)
pembaruan sekarang akan berfungsi dengan baik.Versi yang diperkecil:
Contoh:
Tampilkan cuplikan kode
Jawaban ini disalin secara verbatim dari jawaban saya ke pertanyaan serupa lainnya .
sumber
Gunakan saja:
dari pada:
sumber