Saya secara terprogram memperbarui beberapa bidang di formulir saya dengan nilai dan saya ingin menyetel status bidang ke $dirty
. Melakukan sesuatu seperti:
$scope.myForm.username.$dirty = true;
sepertinya tidak berhasil.
Ada metode $setPristine
yang dapat saya gunakan untuk mengatur ulang status lapangan tetapi tidak ada $setDirty
metode?
Jadi bagaimana cara melakukan ini?
Saya melihat posting ini https://groups.google.com/forum/#!topic/angular/NQKGAFlsln4 tetapi sepertinya saya tidak dapat menemukan $setDirty
metodenya. Saya menggunakan Angular versi 1.1.5.
$setDirty
di tingkat lapangan.Jawaban:
Sejak AngularJS 1.3.4 Anda dapat menggunakan
$setDirty()
di bidang ( sumber ). Misalnya, untuk setiap bidang dengan kesalahan dan ditandai diperlukan, Anda dapat melakukan hal berikut:sumber
Dalam kasus Anda,
$scope.myForm.username.$setViewValue($scope.myForm.username.$viewValue);
lakukan triknya - membuat formulir dan bidang menjadi kotor, dan menambahkan kelas CSS yang sesuai.Sejujurnya, saya menemukan solusi ini di posting baru di topik dari tautan dari pertanyaan Anda. Ini bekerja dengan sempurna untuk saya, jadi saya meletakkan ini di sini sebagai jawaban mandiri agar lebih mudah ditemukan.
EDIT:
Solusi di atas bekerja paling baik untuk versi Angular hingga 1.3.3. Mulai 1.3.4, Anda harus menggunakan metode API yang baru dibuka
$setDirty()
daringModel.NgModelController
.sumber
$scope.myForm.myField.$pristine = false; $scope.myForm.myField.$setViewValue(...)
. Sepertinya jawaban di bawah ini menyatakan bahwafield.$setDirty()
ditambahkan di Angular 1.3.4 akan menjadi solusi yang lebih baikAnda harus mengatur
$dirty
ketrue
dan$pristine
ke secara manualfalse
untuk bidang tersebut. Jika Anda ingin kelas muncul pada masukan Anda, maka Anda harus menambahng-dirty
dan menghapusng-pristine
kelas dari elemen secara manual. Anda dapat menggunakan$setDirty()
di tingkat formulir untuk melakukan semua ini di formulir itu sendiri, tetapi bukan masukan formulir, masukan formulir saat ini tidak memiliki$setDirty()
seperti yang Anda sebutkan.Jawaban ini mungkin berubah di masa depan karena harus menambah
$setDirty()
masukan, tampaknya logis.sumber
Jika Anda memiliki akses ke NgModelController (Anda hanya bisa mengaksesnya dari arahan) maka Anda dapat memanggil
sumber
Membuat jsFiddle hanya untuk Anda yang memecahkan masalah ini. cukup setel $ dirty menjadi true, tetapi dengan
$timeout 0
begitu ini berjalan setelah DOM dimuat.Temukan di sini: JsFiddle
sumber
Inilah yang berhasil bagi saya
sumber
Anda bisa menggunakan
$setDirty();
metode. Lihat dokumentasi https://docs.angularjs.org/api/ng/type/form.FormControllerContoh:
sumber
Fungsi pembantu untuk melakukan pekerjaan:
sumber
Sudut 2
Bagi siapa pun yang ingin melakukan hal yang sama di Angular 2 itu sangat mirip selain mendapatkan formulirnya
sumber
Catatan tambahan kecil untuk jawaban @ rmag. Jika Anda memiliki bidang kosong tapi wajib diisi yang ingin Anda jorok gunakan ini:
sumber
Saya tidak yakin mengapa Anda mencoba menandai bidang sebagai kotor, tetapi saya mengalami situasi yang sama karena saya ingin kesalahan validasi muncul saat seseorang mencoba mengirimkan formulir yang tidak valid. Saya akhirnya menggunakan jQuery untuk menghapus
.ng-pristine
tag kelas dan menambahkan.ng-dirty
tag kelas ke bidang yang sesuai. Sebagai contoh:sumber