Saya memiliki formulir dengan bidang input dan pengaturan validasi dengan menambahkan required
atribut dan semacamnya. Tetapi untuk beberapa bidang saya perlu melakukan beberapa validasi tambahan. Bagaimana saya "mengetuk" ke validasi yang FormController
mengontrol?
Validasi khusus dapat berupa "jika 3 bidang ini diisi, maka bidang ini diperlukan dan perlu diformat dengan cara tertentu".
Ada metode di FormController.$setValidity
tapi itu tidak terlihat seperti API publik jadi saya lebih suka tidak menggunakannya. Membuat arahan khusus dan menggunakan NgModelController
tampak seperti opsi lain, tetapi pada dasarnya akan mengharuskan saya untuk membuat arahan untuk setiap aturan validasi khusus, yang tidak saya inginkan.
Sebenarnya, menandai bidang dari controller sebagai tidak valid (sambil tetap FormController
menyinkronkan) mungkin adalah hal yang saya butuhkan dalam skenario paling sederhana untuk menyelesaikan pekerjaan, tetapi saya tidak tahu bagaimana melakukannya.
formName.$warning
.$$
mendahului apis tanpa-publik, dengan$
menjadi publik. Lihat stackoverflow.com/questions/19338493/...Jawaban:
Edit: menambahkan informasi tentang ngMessages (> = 1.3.X) di bawah ini.
Pesan validasi form standar (1.0.X ke atas)
Karena ini adalah salah satu hasil teratas jika Anda Google "Validasi Formulir Sudut", saat ini, saya ingin menambahkan jawaban lain untuk ini bagi siapa pun yang datang dari sana.
Ini "publik", jangan khawatir. Gunakan. Itu untuk apa. Jika itu tidak dimaksudkan untuk digunakan, para dev Angular akan memprivatisasinya dalam penutupan.
Untuk melakukan validasi khusus, jika Anda tidak ingin menggunakan Angular-UI seperti jawaban lain yang disarankan, Anda cukup menggulirkan arahan validasi Anda sendiri.
Dan inilah beberapa contoh penggunaan:
Catatan: di 1.2.x itu mungkin preferrable untuk pengganti
ng-if
untukng-show
di atasBerikut ini adalah tautan plunker wajib
Juga, saya telah menulis beberapa entri blog tentang hal ini yang lebih detail:
Validasi Formulir Sudut
Arahan Validasi Kustom
Edit: menggunakan ngMessages di 1.3.X
Anda sekarang dapat menggunakan modul ngMessages alih-alih ngShow untuk menampilkan pesan kesalahan Anda. Ini benar-benar akan bekerja dengan apa pun, tidak harus menjadi pesan kesalahan, tapi inilah dasarnya:
<script src="angular-messages.js"></script>
Referensi
ngMessages
dalam deklarasi modul Anda:Tambahkan markup yang sesuai:
Pada markup di atas,
ng-message="personForm.email.$error"
pada dasarnya menentukan konteks untukng-message
arahan anak. Kemudianng-message="required"
danng-message="email"
tentukan properti pada konteks itu untuk ditonton. Yang paling penting, mereka juga menentukan perintah untuk memeriksanya . Yang pertama ditemukan dalam daftar yang "benar" menang, dan itu akan menunjukkan pesan itu dan tidak ada yang lain.Dan seorang plunker untuk contoh ngMessages
sumber
return value ? valid : undefined
atas.Proyek Angular-UI mencakup arahan validasi ui, yang mungkin akan membantu Anda dengan ini. Ini memungkinkan Anda menentukan fungsi untuk memanggil untuk melakukan validasi.
Lihat halaman demo: http://angular-ui.github.com/ , cari ke bawah ke arah Validasi.
Dari halaman demo:
kemudian di controller Anda:
sumber
Anda dapat menggunakan ng-diperlukan untuk skenario validasi Anda ("jika 3 bidang ini diisi, maka bidang ini wajib diisi":
sumber
Anda dapat menggunakan Angular-Validator .
Contoh: menggunakan fungsi untuk memvalidasi bidang
Kemudian di controller Anda, Anda akan memiliki sesuatu seperti
Anda juga dapat melakukan sesuatu seperti ini:
(di mana field1 field2, dan field3 adalah variabel lingkup. Anda mungkin juga ingin memeriksa apakah bidang tidak sama dengan string kosong)
Jika bidang tidak lulus,
validator
maka bidang tersebut akan ditandai sebagai tidak valid dan pengguna tidak akan dapat mengirimkan formulir.Untuk kasus dan contoh penggunaan lebih lanjut, lihat: https://github.com/turinggroup/angular-validator
Penafian: Saya penulis Angular-Validator
sumber
Baru-baru ini saya membuat arahan untuk memungkinkan validasi berbasis input input bentuk sudut. Ekspresi sudut yang valid dapat digunakan, dan mendukung kunci validasi khusus menggunakan notasi objek. Diuji dengan v1.3.8 sudut
Anda bisa menggunakannya seperti ini:
Atau dengan hanya memberikan ekspresi (itu akan diberikan validasi defaultKey dari "invalidIf")
sumber
Berikut cara keren untuk melakukan validasi ekspresi wildcard khusus dalam formulir (dari: Validasi formulir lanjutan dengan AngularJS dan filter ):
Demo jsFiddle (mendukung penamaan ekspresi dan banyak ekspresi)
Ini mirip dengan
ui-validate
, tetapi Anda tidak memerlukan fungsi validasi spesifik lingkup (ini berfungsi secara umum) dan tentu saja Anda tidak perlu ui.utils dengan cara ini.sumber
Memperbarui:
Versi yang ditingkatkan dan disederhanakan dari arahan sebelumnya (satu bukannya dua) dengan fungsi yang sama:
Contoh penggunaan:
Hasil: Ekspresi pengujian yang saling bergantung di mana validator dieksekusi pada perubahan model direktif dan model saat ini lainnya.
Ekspresi tes memiliki
$model
variabel lokal yang harus Anda gunakan untuk membandingkannya dengan variabel lain.Sebelumnya:
Saya telah berupaya meningkatkan kode @Plantface dengan menambahkan arahan ekstra. Arahan ekstra ini sangat berguna jika ekspresi kita perlu dieksekusi ketika perubahan dibuat di lebih dari satu variabel Model.
Contoh cara menggunakannya untuk membuat bidang yang divalidasi silang:
ensure-expression
dieksekusi untuk memvalidasi model ketikang-model
atau salah satuensure-watch
variabel diubah.sumber
@synergetic Saya pikir @blesh kira menempatkan fungsi memvalidasi seperti di bawah ini
sumber
Validasi Kustom yang memanggil Server
Gunakan API ngModelController
$asyncValidators
yang menangani validasi asinkron, seperti membuat$http
permintaan ke backend. Fungsi yang ditambahkan ke objek harus mengembalikan janji yang harus diselesaikan saat valid atau ditolak saat tidak valid. Validasi async yang sedang berlangsung disimpan dengan kuncingModelController.$pending
. Untuk informasi lebih lanjut, lihat Panduan Pengembang AngularJS - Formulir (Validasi Kustom) .Untuk informasi lebih lanjut, lihat
$asyncValidators
API ngModelControllerPanduan Pengembang AngularJS - Formulir (Validasi Kustom) .
Menggunakan
$validators
APIJawaban yang diterima menggunakan
$parsers
dan$formatters
jalur pipa untuk menambahkan validator sinkron khusus. AngularJS 1.3+ menambahkan$validators
API sehingga tidak perlu memasukkan validator ke dalam$parsers
dan$formatters
jalur pipa:Untuk informasi lebih lanjut, lihat Referensi API AngularJS ngModelController - $ validator .
sumber
Di AngularJS tempat terbaik untuk menentukan Validasi Kustom adalah direktif Cutsom. AngularJS menyediakan modul ngMessages.
Untuk validasi formulir kustom. Seseorang harus menggunakan Modul ngMessages dengan direktif khusus. Di sini saya memiliki validasi sederhana yang akan memeriksa apakah panjang angka kurang dari 6 menampilkan kesalahan pada layar.
Berikut adalah cara membuat arahan validasi khusus
$setValidity
adalah fungsi bawaan untuk mengatur status model ke valid / tidak validsumber
Saya memperluas jawaban @Ben Lesh dengan kemampuan untuk menentukan apakah validasi peka huruf besar-kecil atau tidak (default)
menggunakan:
kode:
sumber
Beberapa contoh dan lib yang bagus disajikan di utas ini, tetapi mereka tidak memiliki apa yang saya cari. Pendekatan saya: angular-validity - lib validasi berbasis janji untuk validasi asinkron, dengan styling Bootstrap opsional yang dipanggang.
Solusi validitas sudut untuk kasus penggunaan OP mungkin terlihat seperti ini:
Ini Fiddle , jika Anda ingin mencobanya. Lib tersedia di GitHub , memiliki dokumentasi terperinci, dan banyak demo langsung.
sumber