AngularJS Form Validering med ngMessages
Næsten alle webapplikationer har formularer til modtagelse af data fra brugeren. Det giver brugerne mulighed for at indtaste, og dataene vil blive behandlet i backend. I AngularJS bliver formularerne synkroniseret med dens model med to-vejs databinding i angularjs gennem ngModel direktiv. Lad os se, hvordan AngularJS kan gavne os, når vi arbejder med formularer, især under validering og forskellige tilstande af formularerne.
AngularJS Form Validation Eksempel
Lad os tage et simpelt login-eksempel og se, hvordan vi kan tilføje validering til det.
<!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>AngularJS Form Validation Example</title> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js"> </script> </head> <body ng-app="myApp"> <div ng-controller="LoginCtrl"> <script type="text/javascript"> angular.module('myApp', []).controller('LoginCtrl', function($scope) { $scope.login = function(username,password) { if(username == 'Java' && password == 'InterviewPoint') { alert("Correct User"); } else { alert("Invalid User"); } }; }); </script> <form name="loginform"> <label>UserName :</label> <input type="text" ng-model="username" placeholder="Enter your User Name" required ng-minlength="5" /></br> </br> <label>Password :</label> <input type="text" ng-model="password" placeholder="Enter your Password" required /></br> </br> <button ng-click="login(username,password)" ng-disabled="loginform.$invalid">Login</button> </form> </div> </body> </html>
Hvordan fungerer tingene her?
- vi har tilføjet en simpel formular, som vi har givet navnet som "loginform"
- Tilføjet HTML5-valideringstag "påkrævet" til hvert inputfelt for at gøre det obligatorisk
- Vi har tilføjet en validator ng-minlength , som håndhæver den mindste længde af værdien i inputfeltet for brugernavnet er på 5 tegn
- Til indsend-knappen har vi tilføjet direktivet ng-deaktiveret . Dette deaktiverer indsend-knappen, når betingelsen er opfyldt. I vores tilfælde vil vi "Login"-knappen blive deaktiveret, når formularen "loginform" er $invalid.
Output:
Hit på URL'en:http://localhost:8080/AngularJS_Tutorial/LoginForm.html
Du kunne se, at "Login" knappen vil blive deaktiveret, indtil formularvalideringerne er ryddet. (dvs.) et gyldigt brugernavn indtastes, da det er et obligatorisk felt, og længden skal være større end 5 tegn og adgangskode er indtastet, da det også er et obligatorisk felt.
Formattilstand i AngularJS
AngularJS har nedenstående 5 formulartilstande
Formulartilstand | Beskrivelse |
---|---|
$invalid | AngularJS indstiller denne tilstand, når nogen af valideringerne som requried, ng-minlength, ng-maxlength osv. på nogen af felterne på formularen er ugyldig |
$valid | Dette er omvendt af $invalid tilstand, denne tilstand er indstillet, når al validering i formularen er evaluering, der skal rettes |
$pristine | Alle formularer i angularjs starter med denne tilstand, denne tilstand fortæller os de felter, som ikke er ændret af brugeren |
$dirty | $dirty er omvendt af $pristine , fortæller det, at brugeren har ændret formularelementet |
$error | Denne tilstand indeholder alle fejl på hvert formularelement |
Alle de ovennævnte tilstande undtagen $error er boolske og kan bruges som betingelse til at vise, skjule, deaktivere eller aktiver ethvert formelement.
Viser fejlmeddelelse
Ved at bruge validatorerne kan vi selvfølgelig aktivere eller deaktiver Send knappen, men det tjener ikke formålet. Vi er nødt til at fortælle brugeren, hvad der gik galt, og hvad der skal rettes.
<!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>AngularJS Form Validation Example</title> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js"> </script> </head> <body ng-app="myApp"> <div ng-controller="LoginCtrl"> <script type="text/javascript"> angular.module('myApp', []).controller('LoginCtrl', function($scope) { $scope.login = function(username,password) { if(username == 'Java' && password == 'InterviewPoint') { alert("Correct User"); } else { alert("Invalid User"); } }; }); </script> <form name="loginform"> <label>UserName :</label> <input type="text" name="uname" ng-model="username" placeholder="Enter your User Name" required ng-minlength="5" /></br> <span style="color:red" ng-show="loginform.uname.$error.required">Username has to be entered</span> <span style="color:red"ng-show="loginform.uname.$error.minlength">Username has to be minimum 5 Character length</span> </br> <label>Password :</label> <input type="text" name="pwd" ng-model="password" placeholder="Enter your Password" required /></br> <span style="color:red" ng-show="loginform.pwd.$error.required">Password has to entered</span> </br> <button ng-click="login(username,password)" ng-disabled="loginform.$invalid">Login</button> </form> </div> </body> </html>
Hvad er ændringerne?
- Først har vi tilføjet navneattributten til inputfelterne, “uname” for brugernavn tekstboks og "pwd" for adgangskode tekstboks. Når vi tilføjer et navn til et input, opretter det en model på formularen for det pågældende input med fejltilstanden.
- Så nu kan vi få adgang til de fejl, der opstod i brugernavnsfeltet ved at bruge “loginform.uname.$error.required” når brugernavnet ikke er indtastet og “loginform.uname.$error.minlength” når minimumslængdekriterierne ikke er opfyldt. Tilsvarende for feltet Adgangskode “loginform.pwd.$error.required” når adgangskoden ikke indtastes.
AngularJS-formularvalidering med ngMessages
I ovenstående kode har vi tilføjetng-showet direktiv til hvert af felterne for at vise fejlmeddelelsen. Før udgivelsen af ngMessages udviklere er nødt til at stole på ng-showet direktiv for at vise fejlmeddelelsen. ngBeskeder er samlet i AngularJS 1.3-udgivelsen, ngMessages tilføjet forbedret understøttelse af visning af meddelelser til brugeren, især fejlmeddelelser under formularvalidering.
<!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>AngularJS Form Validation Example</title> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular-messages.js"></script> </head> <body ng-app="myApp"> <div ng-controller="LoginCtrl"> <script type="text/javascript"> angular.module('myApp', ['ngMessages']).controller('LoginCtrl',function($scope) { $scope.login = function(username,password) { if(username == 'Java' && password == 'InterviewPoint') { alert("Correct User"); } else { alert("Invalid User"); } }; }); </script> <form name="loginform"> <label>UserName :</label> <input type="text" name="uname" ng-model="username" placeholder="Enter your User Name" required ng-minlength="5" /></br> <div ng-messages="loginform.uname.$error"> <div style="color:red" ng-message="required">Username has to be entered..</div> <div style="color:red" ng-message="minlength">Username has to be minimum 5 Character length..</div> </div> </br> <label>Password :</label> <input type="text" name="pwd" ng-model="password" placeholder="Enter your Password" required /></br> <div ng-messages="loginform.pwd.$error"> <div style="color:red" ng-message="required">Password has to be entered..</div> </div> </br> <button ng-click="login(username,password)" ng-disabled="loginform.$invalid">Login</button> </form> </div> </body> </html>
Hvad er ændringerne?
- ngBeskeder vil blive bundtet i en separat js "angular-messages.js" vi har inkluderet det som et første skridt.
- For at bruge ngMessages modul skal vi inkludere det som vores modulafhængighed, som vi har tilføjet i vores angular.module
- Det er alle ngBeskeder vil håndtere at vise og skjule specifikke meddelelser baseret på fejlene. Grundlæggende ngMessages går gennem formularfelternes fejl, loginform.uname.$error for vores brugernavn og loginform.pwd.$error for vores adgangskodefelt.
- inputtype "navn" felt kan grundlæggende kun have 3 valideringer påkrævet, minlength, maxlength og dem blev nævnt i ng-meddelelsen attribut med den tilsvarende valideringsmeddelelse.
Output: