Jawaban:
The ng-dirty
kelas memberitahu Anda bahwa formulir telah dimodifikasi oleh pengguna, sedangkan ng-pristine
kelas memberitahu Anda bahwa bentuk belum diubah oleh pengguna. Jadi ng-dirty
dan ng-pristine
dua sisi dari cerita yang sama.
Kelas ditetapkan di bidang apa pun, sedangkan formulir memiliki dua properti, $dirty
dan $pristine
.
Anda dapat menggunakan $scope.form.$setPristine()
fungsi untuk mengatur ulang formulir ke keadaan asli (harap dicatat bahwa ini adalah fitur AngularJS 1.1.x).
Jika Anda menginginkan $scope.form.$setPristine()
perilaku -ish bahkan di cabang 1.0.x AngularJS, Anda perlu menggulung solusi Anda sendiri (beberapa yang cukup bagus dapat ditemukan di sini ). Pada dasarnya, ini berarti mengulangi semua bidang formulir dan menyetel $dirty
benderanya ke false
.
Semoga ini membantu.
pristine memberi tahu kami jika suatu bidang masih perawan, dan dirty memberi tahu kami jika pengguna telah mengetik apa pun di bidang terkait:
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>
<form ng-app="" name="myForm">
<input name="email" ng-model="data.email">
<div class="info" ng-show="myForm.email.$pristine">
Email is virgine.
</div>
<div class="error" ng-show="myForm.email.$dirty">
E-mail is dirty
</div>
</form>
Bidang yang telah mendaftarkan peristiwa keydown tunggal tidak lagi perawan (tidak lebih murni) dan oleh karena itu kotor selamanya.
Kedua arahan tersebut jelas memiliki tujuan yang sama, dan meskipun tampaknya keputusan tim sudut untuk memasukkan keduanya mengganggu prinsip KERING dan menambah muatan laman, masih agak praktis untuk memiliki keduanya. Lebih mudah untuk mengatur gaya elemen input Anda karena Anda memiliki .ng-pristine dan .ng-dirty yang tersedia untuk ditata dalam file css Anda. Saya kira ini adalah alasan utama untuk menambahkan kedua arahan.
.ng-pristine
dan .ng-dirty
izinkan gaya css yang berbeda - ini tampaknya alasan paling benar di balik pengulangan
Seperti yang telah dikemukakan pada jawaban sebelumnya, ng-pristine
untuk menunjukkan bahwa bidang tersebut belum dimodifikasi, sedangkanng-dirty
untuk memberitahu sudah dimodifikasi. Mengapa membutuhkan keduanya?
Katakanlah kita memiliki formulir dengan alamat telepon dan email di antara bidang-bidang tersebut. Baik telepon atau email diperlukan, dan Anda juga harus memberi tahu pengguna ketika mereka mendapatkan data yang tidak valid di setiap bidang. Ini dapat dicapai dengan menggunakan ng-dirty
dan ng-pristine
bersama - sama:
<form name="myForm">
<input name="email" ng-model="data.email" ng-required="!data.phone">
<div class="error"
ng-show="myForm.email.$invalid &&
myForm.email.$pristine &&
myForm.phone.$pristine">Phone or e-mail required</div>
<div class="error"
ng-show="myForm.email.$invalid && myForm.email.$dirty">
E-mail is invalid
</div>
<input name="phone" ng-model="data.phone" ng-required="!data.email">
<div class="error"
ng-show="myForm.phone.$invalid &&
myForm.email.$pristine &&
myForm.phone.$pristine">Phone or e-mail required</div>
<div class="error"
ng-show="myForm.phone.$invalid && myForm.phone.$dirty">
Phone is invalid
</div>
</form>
ng-murni ($ murni)
Boolean True jika form / input belum digunakan ( belum diubah oleh pengguna )
ng-kotor ($ kotor)
Boolean True jika form / input telah digunakan ( dimodifikasi oleh pengguna )
$ setDirty (); Menyetel formulir ke keadaan kotor. Metode ini bisa dipanggil untuk menambahkan kelas 'ng-dirty' dan menyetel formulir ke status kotor (kelas ng-dirty). Metode ini akan menyebarkan status saat ini ke formulir induk.
$ setPristine (); Menyetel formulir ke keadaan aslinya. Metode ini menyetel status $ pristine formulir ke true, status $ dirty ke false, menghapus kelas ng-dirty dan menambahkan kelas ng-pristine. Selain itu, ini menyetel status $ submit ke false. Metode ini juga akan menyebar ke semua kontrol yang terdapat dalam formulir ini.
Menyetel kembali formulir ke keadaan semula sering kali berguna saat kita ingin 'menggunakan kembali' formulir setelah menyimpan atau menyetel ulang.