AngularJS手动表单验证
所谓手动验证是通过AngularJS表单的属性来验证,而成为AngularJS表单必须满足两个条件:
1、给form元素加上novalidate="novalidate";
2、给form元素加上name="theForm",
如下:
<!DOCTYPEhtml> <htmllang="en"ng-app="myApp1"> <head> <metacharset="UTF-8"> <title></title> <linkrel="stylesheet"href="../node_modules/bootstrap/dist/css/bootstrap.min.css"/> <linkrel="stylesheet"href="../css/main.css"/> </head> <body> <navclass="navbarnavbar-inversenavbar-fixed-top"> <divclass="container"> <divclass="navbar-header"> <ahref="/"class="navbar-brand">FormSubmitting</a> </div> </div> </nav> <divclass="containermain-content"ng-controller="myCtrl1"> <!--novalidate让表单不要使用html验证--> <!--theForm变成scope的一个字段--> <formng-submit="onSubmit(theForm.$valid)"novalidate="novalidate"name="theForm"> <divclass="form-group"> <labelfor="name">Name</label> <inputtype="text"class="form-control"id="name"ng-model="formModel.name"/> </div> <divclass="form-group"ng-class="{ 'has-error':!theForm.email.$valid&&(!theForm.$pristine||theForm.$submitted), 'has-success':theForm.email.$valid&&(!theForm.$pristine||theForm.$submitted) }"> <labelfor="email">Email</label> <inputtype="email"class="form-control"id="email"ng-model="formModel.email"required="required"name="email"/> <pclass="help-block"ng-show="theForm.email.$error.required&&(!theForm.$pristine||theForm.$submitted)">必填</p> <pclass="help-block"ng-show="theForm.email.$error.email&&(!theForm.$pristine||theForm.$submitted)">email格式不正确</p> </div> <divclass="form-group"> <labelfor="username">Username</label> <inputtype="text"class="form-control"id="username"ng-model="formModel.username"/> </div> <divclass="form-group"> <labelfor="age">Age</label> <inputtype="number"class="form-control"id="age"ng-model="formModel.age"/> </div> <divclass="form-group"> <labelfor="sex">Sex</label> <selectname="sex"id="sex"class="form-control"ng-model="formModel.sex"> <optionvalue="">Pleasechoose</option> <optionvalue="male">Mail</option> <optionvalue="femail">Femail</option> </select> </div> <divclass="form-group"> <labelfor="password">Password</label> <inputtype="text"class="form-control"id="password"ng-model="formModel.password"/> </div> <divclass="form-group"> <buttonclass="btnbtn-primary"type="submit">Register</button> </div> <pre> {{theForm|json}} </pre> </form> </div> <scriptsrc="../node_modules/angular/angular.min.js"></script> <scriptsrc="second.js"></script> </body> </html>
- ●给form加上novalidate="novalidate"意味着表单将不再使用HTML5验证特性
- ●给form加上name="theForm"意味着表单的名称是theForm。如何使用theForm,比如我们验证表单是否被修改过theForm.$submitted
- ●通过ng-submit提交表单
- ●formModel是$scope中的一个属性
- ●对表单的Email进行了手动验证,使用了AngularJS表单的众多属性,比如theForm.email.$valid,theForm.$pristine,theForm.$submitted,theForm.email.$error.required,theForm.email.$error.email
- ●通过<pre>{{theForm|json}}</pre>把AngularJS表单的所有属性都打印出来
{ "$error":{ "required":[ { "$validators":{}, "$asyncValidators":{}, "$parsers":[], "$formatters":[ null ], "$viewChangeListeners":[], "$untouched":true, "$touched":false, "$pristine":true, "$dirty":false, "$valid":false, "$invalid":true, "$error":{ "required":true }, "$name":"email", "$options":null } ] }, "$name":"theForm", "$dirty":false, "$pristine":true, "$valid":false, "$invalid":true, "$submitted":false, "email":{ "$validators":{}, "$asyncValidators":{}, "$parsers":[], "$formatters":[ null ], "$viewChangeListeners":[], "$untouched":true, "$touched":false, "$pristine":true, "$dirty":false, "$valid":false, "$invalid":true, "$error":{ "required":true }, "$name":"email", "$options":null }, "sex":{ "$validators":{}, "$asyncValidators":{}, "$parsers":[], "$formatters":[], "$viewChangeListeners":[], "$untouched":true, "$touched":false, "$pristine":true, "$dirty":false, "$valid":true, "$invalid":false, "$error":{}, "$name":"sex", "$options":null } }
以上,凡是有name属性的input都被显示在上面。
在second.js文件中定义了module,controller以及提交表单的方法。
varmyApp1=angular.module('myApp1',[]); myApp1.controller('myCtrl1',function($scope,$http){ $scope.formModel={}; $scope.onSubmit=function(){ $http.post('someurl',$scope.formModel) .success(function(data){ console.log(':)'); }) .error(function(data){ console.log(':('); }); console.log($scope.formModel); }; });
以上的表单验证方式好处是可控性强,但相对繁琐。
以上就是本文的全部内容,希望对AngularJS手动表单验证能够熟练操作。