AngularJS validatsiya


AngularJS kiritilgan ma’lumotlarni tekshira (validatsiya qila) oladi.


ULASHISH

Formani tekshirish (validatsiya)

AngularJS mijoz tomonida (client-side) forma validatsiyasini taklif etadi.

AngularJS forma va kiritish maydonlarining (input, textarea, select) holatini kuzatib boradi va foydalanuvchini joriy holat haqida xabardor qilish imkonini beradi.

AngularJS, shuningdek, ularga tegilgan (touched) yoki ular o‘zgartirilgan yoki yo‘qligi haqidagi ma’lumotni ham saqlaydi.

Kiritilgan ma’lumotlarni tekshirish uchun standart HTML5 atributlaridan foydalanishingiz yoki o‘z validatsiya funksiyalaringizni yaratishingiz mumkin.

Mijoz tomonidagi validatsiyaning o‘zi foydalanuvchi kiritgan ma’lumotlarni himoyalay olmaydi. Server tomonidagi validatsiya ham zarur.


Majburiy (required)

Kiritish maydoni to‘ldirilishi shart ekanini belgilash uchun HTML5’ning required atributidan foydalaning:

Misol

Kiritish maydoni majburiy:

<form name="myForm">   <input name="myInput" ng-model="myInput" required> </form> <p>The input's valid state is:</p> <h1>{{myForm.myInput.$valid}}</h1>
O‘zingiz sinab ko‘ring »

E-mail

Qiymat e-mail bo‘lishi kerakligini belgilash uchun HTML5’ning email tipidan foydalaning:

Misol

Kiritish maydoni e-mail bo‘lishi kerak:

<form name="myForm">   <input name="myInput" ng-model="myInput" type="email"> </form> <p>The input's valid state is:</p> <h1>{{myForm.myInput.$valid}}</h1>
O‘zingiz sinab ko‘ring »


Forma holati va kiritish maydoni holati

AngularJS forma va kiritish maydonlarining holatini doimiy ravishda yangilab boradi.

Kiritish maydonlari quyidagi holatlarga ega:

  • $untouched Maydonga hali tegilmagan
  • $touched Maydonga tegilgan
  • $pristine Maydon hali o‘zgartirilmagan
  • $dirty Maydon o‘zgartirilgan
  • $invalid Maydon mazmuni yaroqsiz
  • $valid Maydon mazmuni yaroqli

Ularning barchasi kiritish maydonining xususiyatlari bo‘lib, qiymati true yoki false bo‘ladi.

Formalar quyidagi holatlarga ega:

  • $pristine Hali hech bir maydon o‘zgartirilmagan
  • $dirty Bir yoki bir nechta maydon o‘zgartirilgan
  • $invalid Forma mazmuni yaroqsiz
  • $valid Forma mazmuni yaroqli
  • $submitted Forma yuborilgan

Ularning barchasi formaning xususiyatlari bo‘lib, qiymati true yoki false bo‘ladi.

Bu holatlardan foydalanuvchiga mazmunli xabarlar ko‘rsatish uchun foydalanishingiz mumkin. Masalan, agar maydon majburiy bo‘lsa va foydalanuvchi uni bo‘sh qoldirsa, foydalanuvchiga ogohlantirish berishingiz kerak:

Misol

Agar maydonga tegilgan VA u bo‘sh bo‘lsa, xato xabarini ko‘rsating:

<input name="myName" ng-model="myName" required> <span ng-show="myForm.myName.$touched && myForm.myName.$invalid">The name is required.</span>
O‘zingiz sinab ko‘ring »

CSS klasslari

AngularJS formalar va kiritish maydonlariga ularning holatiga qarab CSS klasslarini qo‘shadi.

Kiritish maydonlariga quyidagi klasslar qo‘shiladi yoki ulardan olib tashlanadi:

  • ng-untouched Maydonga hali tegilmagan
  • ng-touched Maydonga tegilgan
  • ng-pristine Maydon hali o‘zgartirilmagan
  • ng-dirty Maydon o‘zgartirilgan
  • ng-valid Maydon mazmuni yaroqli
  • ng-invalid Maydon mazmuni yaroqsiz
  • ng-valid-key Har bir validatsiya uchun bitta kalit. Masalan: ng-valid-required, bir nechta narsani tekshirish kerak bo‘lganda foydali
  • ng-invalid-key Masalan: ng-invalid-required

Formalarga quyidagi klasslar qo‘shiladi yoki ulardan olib tashlanadi:

  • ng-pristine Hali hech bir maydon o‘zgartirilmagan
  • ng-dirty Bir yoki bir nechta maydon o‘zgartirilgan
  • ng-valid Forma mazmuni yaroqli
  • ng-invalid Forma mazmuni yaroqsiz
  • ng-valid-key Har bir validatsiya uchun bitta kalit. Masalan: ng-valid-required, bir nechta narsani tekshirish kerak bo‘lganda foydali
  • ng-invalid-key Masalan: ng-invalid-required

Klasslar ular ifodalagan qiymat false bo‘lsa, olib tashlanadi.

Ilovangizga yaxshiroq va intuitiv tushunarli foydalanuvchi interfeysini berish uchun ushbu klasslarga uslublar qo‘shing.

Misol

Standart CSS yordamida uslublarni qo‘llang:

<style>
input.ng-invalid {   background-color: pink; } input.ng-valid {   background-color: lightgreen; }
</style>
O‘zingiz sinab ko‘ring »

Formalarga ham uslub berish mumkin:

Misol

O‘zgartirilmagan (pristine) formalar va o‘zgartirilgan formalar uchun uslublarni qo‘llang:

<style>
form.ng-pristine {   background-color: lightblue; } form.ng-dirty {   background-color: pink; }
</style>
O‘zingiz sinab ko‘ring »

Maxsus validatsiya

O‘z validatsiya funksiyangizni yaratish biroz murakkabroq: ilovangizga yangi direktiva qo‘shishingiz va validatsiyani ma’lum belgilangan argumentlarga ega funksiya ichida bajarishingiz kerak.

Misol

Maxsus validatsiya funksiyasini o‘z ichiga olgan o‘z direktivangizni yarating va unga my-directive orqali murojaat qiling.

Maydon faqat qiymatida "e" belgisi bo‘lsagina yaroqli bo‘ladi:

<form name="myForm"> <input name="myInput" ng-model="myInput" required my-directive> </form> <script>
var app = angular.module('myApp', []); app.directive('myDirective', function() {   return {     require: 'ngModel',     link: function(scope, element, attr, mCtrl) {       function myValidation(value) {         if (value.indexOf("e") > -1) {           mCtrl.$setValidity('charE', true);         } else {           mCtrl.$setValidity('charE', false);         }         return value;       }       mCtrl.$parsers.push(myValidation);     }   }; });
</script>
O‘zingiz sinab ko‘ring »

Misol izohi:

HTML’da yangi direktivaga my-directive atributi orqali murojaat qilinadi.

JavaScript’da myDirective nomli yangi direktiva qo‘shishdan boshlaymiz.

Esda tuting, direktivaga nom berayotganda camelCase nomdan foydalanishingiz kerak, myDirective, ammo uni chaqirayotganda - bilan ajratilgan nomdan foydalanishingiz kerak, my-directive.

So‘ngra ngModelController bo‘lgan ngModel talab qilinishini belgilaydigan obyektni qaytaring.

Bir nechta argument qabul qiladigan bog‘lovchi (linking) funksiya yarating, bunda to‘rtinchi argument mCtrl — ngModelController,

So‘ngra funksiya belgilang, bu holda uning nomi myValidation bo‘lib, u bitta argument qabul qiladi — bu argument input elementining qiymati.

Qiymatda "e" harfi borligini tekshiring va model kontrollerining yaroqliligini true yoki false qilib belgilang.

Nihoyat, mCtrl.$parsers.push(myValidation); myValidation funksiyasini boshqa funksiyalar massiviga qo‘shadi, ular kiritilgan qiymat har safar o‘zgarganda bajariladi.


Validatsiya misoli

<!DOCTYPE html> <html> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script> <body> <h2>Validation Example</h2> <form  ng-app="myApp"  ng-controller="validateCtrl" name="myForm" novalidate> <p>Username:<br>   <input type="text" name="user" ng-model="user" required>   <span style="color:red" ng-show="myForm.user.$dirty && myForm.user.$invalid">   <span ng-show="myForm.user.$error.required">Username is required.</span>   </span> </p> <p>Email:<br>   <input type="email" name="email" ng-model="email" required>   <span style="color:red" ng-show="myForm.email.$dirty && myForm.email.$invalid">   <span ng-show="myForm.email.$error.required">Email is required.</span>   <span ng-show="myForm.email.$error.email">Invalid email address.</span>   </span> </p> <p>   <input type="submit"   ng-disabled="myForm.user.$dirty && myForm.user.$invalid ||   myForm.email.$dirty && myForm.email.$invalid"> </p> </form> <script> var app = angular.module('myApp', []); app.controller('validateCtrl', function($scope) {   $scope.user = 'John Doe';   $scope.email = 'john.doe@gmail.com'; }); </script> </body> </html>
O‘zingiz sinab ko‘ring »

HTML formasining novalidate atributi brauzerning standart validatsiyasini o‘chirish uchun ishlatiladi.

Misol izohi

AngularJS’ning ng-model direktivasi input elementlarini modelga bog‘laydi.

Model obyekti ikkita xususiyatga ega: user va email.

ng-show tufayli color:red uslubli span’lar faqat user yoki email $dirty va $invalid bo‘lgandagina ko‘rsatiladi.


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!