AngularJS自动表单验证
内容摘要
AngularJS的另外一种表单验证方式是自动验证,即通过directive来实现,除了AngularJS自带的directive,还需要用到angular-auto-validate这个第三方module。
有关angular-auto-va
有关angular-auto-va
文章正文
AngularJS的另外一种表单验证方式是自动验证,即通过directive来实现,除了AngularJS自带的directive,还需要用到angular-auto-validate这个第三方module。
有关angular-auto-validate:
- 安装:npm i angular-auto-validate
- 引用:<script src="../node_modules/angular-auto-validate/dist/jcs-auto-validate.min.js"></script>
- module依赖:var myApp = angular.module("app", ["jcs-autoValidate"]);
为了实现错误信息本地化,还需要angular-localize这个第三方module:
- 安装:npm install angular-localize --save
- module依赖:var myApp = angular.module("app", ["localize"]);
- 引用:
1 2 | <script src= "../node_modules/angular-sanitize/angular-sanitize.min.js" ></script> <script src= "../node_modules/angular-localize/angular-localize.min.js" ></script> |
此外,当点击提交表单按钮,需要禁用按钮并显示一种等待效果,需要用到angular-ladda这个第三方module:
- 安装:bower install angular-ladda --save
- module依赖:var myApp = angular.module("app", ["angular-ladda"]);
- 引用:
1 2 3 4 5 | <link rel= "stylesheet" href= "../bower_components/ladda/dist/ladda-themeless.min.css" /> <script src= "../bower_components/ladda/dist/spin.min.js" ></script> <script src= "../bower_components/ladda/dist/ladda.min.js" ></script> <script src= "../bower_components/angular-ladda/dist/angular-ladda.min.js" ></script> |
页面如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | <html> <head> <meta charset= "gb2312" > <title></title> <link rel= "stylesheet" href= "../node_modules/bootstrap/dist/css/bootstrap.min.css" /> <link rel= "stylesheet" href= "../bower_components/ladda/dist/ladda-themeless.min.css" /> <link rel= "stylesheet" href= "../css/main.css" /> </head> <body> <nav class = "navbar navbar-inverse navbar-fixed-top" > <div class = "container" > <div class = "navbar-header" > <a href= "/" class = "navbar-brand" >Form Validating Auto</a> </div> </div> </nav> <div class = "container main-content" ng-controller= "myCtrl1" > <!--novalidate让表单不要使用html验证--> <!--theForm变成scope的一个字段--> <form ng-submit= "onSubmit()" novalidate= "novalidate" > <div class = "form-group" > <label for = "name" class = "control-label" >Name</label> <input type= "text" class = "form-control" id= "name" ng-model= "formModel.name" required= "required" /> </div> <div class = "form-group" > <label for = "email" class = "control-label" >Email</label> <input type= "email" class = "form-control" id= "email" ng-model= "formModel.email" required= "required" /> </div> <div class = "form-group" > <label for = "username" class = "control-label" >Username</label> <input type= "text" class = "form-control" id= "username" ng-model= "formModel.username" required= "required" ng-pattern= "/^[A-Za-z0-9_]{1,32}$/" ng-minlength= "7" ng-pattern-err-type= "badUsername" /> </div> <div class = "form-group" > <label for = "age" class = "control-label" >Age</label> <input type= "number" class = "form-control" id= "age" ng-model= "formModel.age" required= "required" min= "18" max= "65" ng-min-err-type= "tooYoung" ng-max-err-type= "tooOld" /> </div> <div class = "form-group" > <label for = "sex" class = "control-label" >Sex</label> <select name= "sex" id= "sex" class = "form-control" ng-model= "formModel.sex" required= "required" > <option value= "" >Please choose</option> <option value= "male" >Mail</option> <option value= "femail" >Femail</option> </select> </div> <div class = "form-group" > <label for = "password" class = "control-label" >Password</label> <input type= "text" class = "form-control" id= "password" ng-model= "formModel.password" required= "required" ng-minlength= "6" /> </div> <div class = "form-group" > <!--<button class = "btn btn-primary" ng-click= "onSubmit()" >Register</button>--> <button class = "btn btn-primary" ladda = "submitting" data-style= "expand-right" type= "submit" > <span ng-show= "submitting" >正在注册...</span> <span ng-show= "!submitting" >注册</span> </button> </div> <pre> {{formModel | json}} </pre> </form> </div> <script src= "../node_modules/angular/angular.min.js" ></script> <script src= "form_validation_auto.js" ></script> <script src= "../node_modules/angular-auto-validate/dist/jcs-auto-validate.min.js" ></script> <script src= "../node_modules/angular-sanitize/angular-sanitize.min.js" ></script> <script src= "../node_modules/angular-localize/angular-localize.min.js" ></script> <script src= "../bower_components/ladda/dist/spin.min.js" ></script> <script src= "../bower_components/ladda/dist/ladda.min.js" ></script> <script src= "../bower_components/angular-ladda/dist/angular-ladda.min.js" ></script> </body> </html> |
先看提交按钮:
1 2 3 4 5 6 7 8 9 10 11 | <div class = "form-group" > <!--<button class = "btn btn-primary" ng-click= "onSubmit()" >Register</button>--> <button class = "btn btn-primary" ladda = "submitting" data-style= "expand-right" type= "submit" > <span ng-show= "submitting" >正在注册...</span> <span ng-show= "!submitting" >注册</span> </button> </div> |
- ladda属性值为bool值,true表示显示动态等待效果,false不显示动态等待效果,这里的submitting是scope中的一个属性
- data-style="expand-right"表示在按钮的右侧显示动态等待效果
再拿表单中的Age字段来说:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <div class = "form-group" > <label for = "age" class = "control-label" >Age</label> <input type= "number" class = "form-control" id= "age" ng-model= "formModel.age" required= "required" min= "18" max= "65" ng-min-err-type= "tooYoung" ng-max-err-type= "tooOld" /> </div> |
其中,min, max为AgularJS的directive,而ng-min-err-type是angular-auto-validate的directive。这里遵循的惯例是ng-AngularJS表单验证的directive名称-err-type,而tooYoung和tooOld的作用是什么,又是在哪里用上了呢?
是在module层面用上了,定义在了form_validation_auto.js文件中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | var myApp1 = angular.module( 'myApp1' ,[ 'jcs-autoValidate' , 'localize' , 'angular-ladda' ]); myApp1.run( function (defaultErrorMessageResolver){ defaultErrorMessageResolver.getErrorMessages().then( function (errorMessages){ errorMessages[ 'tooYoung' ] = '年龄必须小于{0}' ; errorMessages[ 'tooOld' ] = '年龄不能大于{0}' ; errorMessages[ 'badUsername' ] = '用户名只能包含数字、字母或下划线' ; }); }); myApp1.controller( 'myCtrl1' , function ( $scope , $http ){ $scope .formModel = {}; $scope .submitting = false; $scope .onSubmit = function (){ $scope .submitting = true; console.log( '已提交' ); console.log( $scope .formModel); $http .post( 'url' , $scope .formModel) .success( function (data){ console.log( ':)' ); $scope .submitting = false; }) .error( function (data){ console.log( ':(' ); $scope .submitting = false; }); }; }); |
以上就是本文的全部内容,希望对AngularJS手动表单验证能够熟练操作。
代码注释