AngularJS手动表单验证


Posted in Javascript onFebruary 01, 2016

所谓手动验证是通过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>

  • ● 给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以及提交表单的方法。

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

Javascript 相关文章推荐
基于jQuery实现的当离开页面时出现提示的实现代码
Jun 27 Javascript
javascript分页代码实例分享(js分页)
Dec 13 Javascript
jQuery实现的简单提示信息插件
Dec 08 Javascript
将jquery.qqFace.js表情转换成微信的字符码
Dec 01 jQuery
Vue实现点击时间获取时间段查询功能
Aug 21 Javascript
微信小程序网络请求封装示例
Jul 24 Javascript
angular2/ionic2 实现搜索结果中的搜索关键字高亮的示例
Aug 17 Javascript
vue环形进度条组件实例应用
Oct 10 Javascript
jQuery利用FormData上传文件实现批量上传
Dec 04 jQuery
jQuery动态操作表单示例【基于table表格】
Dec 06 jQuery
微信小程序实现的日期午别医生排班表功能示例
Jan 09 Javascript
用原生 JS 实现 innerHTML 功能实例详解
Apr 03 Javascript
基于JavaScript实现动态添加删除表格的行
Feb 01 #Javascript
基于jQuery实现二级下拉菜单效果
Feb 01 #Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
Feb 01 #Javascript
理解javascript中的严格模式
Feb 01 #Javascript
浅析JavaScript作用域链、执行上下文与闭包
Feb 01 #Javascript
jQuery 3.0 的变化及使用方法
Feb 01 #Javascript
jQuery与Ajax以及序列化
Feb 01 #Javascript
You might like
[原创]PHP简单开启curl的方法(测试可行)
2016/01/11 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
翻译整理的jQuery使用查询手册
2007/03/07 Javascript
javascript 日期常用的方法
2009/11/11 Javascript
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
jquery实现增加删除行的方法
2015/02/03 Javascript
JS给Textarea文本框添加行号的方法
2015/08/20 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
nodejs创建简易web服务器与文件读写的实例
2017/09/07 NodeJs
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
2017/09/18 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
2018/05/03 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
python操作MongoDB基础知识
2013/11/01 Python
用Python登录Gmail并发送Gmail邮件的教程
2015/04/17 Python
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
基于DataFrame筛选数据与loc的用法详解
2018/05/18 Python
ubuntu 16.04下python版本切换的方法
2019/06/14 Python
python3+django2开发一个简单的人员管理系统过程详解
2019/07/23 Python
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
Currentbody美国/加拿大:美容仪专家
2020/03/09 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
如何安装ruby on rails
2014/02/09 面试题
跟单文员岗位职责
2014/01/03 职场文书
机械设计毕业生自荐信
2014/02/02 职场文书
服务宗旨标语
2014/07/01 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
企业承诺书格式范文
2015/04/28 职场文书
应收账款管理制度
2015/08/06 职场文书
如何书写读后感?(附范文)
2019/07/26 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis