所谓手动验证是通过AngularJS表单的属性来验证,而成为AngularJS表单必须满足两个条件:
1、给form元素加上novalidate=\"novalidate\";
2、给form元素加上name=\"theForm\",
如下:
<!DOCTYPE html>
<html lang=\"en\" ng-app=\"myApp1\">
<head>
<meta charset=\"UTF-8\">
<title></title>
<link rel=\"stylesheet\" href=\"../node_modules/bootstrap/dist/css/bootstrap.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 Submitting</a>
</div>
</div>
</nav>
<div class=\"container main-content\" ng-controller=\"myCtrl1\">
<!--novalidate让表单不要使用html验证-->
<!--theForm变成scope的一个字段-->
<form ng-submit=\"onSubmit(theForm.$valid)\" novalidate=\"novalidate\" name=\"theForm\">
<div class=\"form-group\">
<label for=\"name\">Name</label>
<input type=\"text\" class=\"form-control\" id=\"name\" ng-model=\"formModel.name\"/>
</div>
<div class=\"form-group\" ng-class=\"{
\'has-error\': !theForm.email.$valid && (!theForm.$pristine || theForm.$submitted),
\'has-success\': theForm.email.$valid && (!theForm.$pristine || theForm.$submitted)
}\">
<label for=\"email\">Email</label>
<input type=\"email\" class=\"form-control\" id=\"email\" ng-model=\"formModel.email\" required=\"required\" name=\"email\"/>
<p class=\"help-block\" ng-show=\"theForm.email.$error.required && (!theForm.$pristine || theForm.$submitted)\">必填</p>
<p class=\"help-block\" ng-show=\"theForm.email.$error.email && (!theForm.$pristine || theForm.$submitted)\">email格式不正确</p>
</div>
<div class=\"form-group\">
<label for=\"username\">Username</label>
<input type=\"text\" class=\"form-control\" id=\"username\" ng-model=\"formModel.username\"/>
</div>
<div class=\"form-group\">
<label for=\"age\">Age</label>
<input type=\"number\" class=\"form-control\" id=\"age\" ng-model=\"formModel.age\"/>
</div>
<div class=\"form-group\">
<label for=\"sex\">Sex</label>
<select name=\"sex\" id=\"sex\" class=\"form-control\" ng-model=\"formModel.sex\">
<option value=\"\">Please choose</option>
<option value=\"male\">Mail</option>
<option value=\"femail\">Femail</option>
</select>
</div>
<div class=\"form-group\">
<label for=\"password\">Password</label>
<input type=\"text\" class=\"form-control\" id=\"password\" ng-model=\"formModel.password\"/>
</div>
<div class=\"form-group\">
<button class=\"btn btn-primary\" type=\"submit\">Register</button>
</div>
<pre>
{{theForm | json}}
</pre>
</form>
</div>
<script src=\"../node_modules/angular/angular.min.js\"></script>
<script src=\"second.js\"></script>
</body>
</html>
{
\"$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以及提交表单的方法。
var myApp1 = 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手动表单验证能够熟练操作。
本文地址:https://www.stayed.cn/item/18952
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我