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手动表单验证能够熟练操作。