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 相关文章推荐
通过js获取div的background-image属性
Oct 15 Javascript
Jquery实现控件的隐藏和显示实例
Feb 08 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
Dec 18 Javascript
javascript产生随机数方法汇总
Jan 25 Javascript
简单的渐变轮播插件
Jan 12 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
Feb 05 Javascript
BOM之navigator对象和用户代理检测
Feb 10 Javascript
原生JS实现图片翻书效果
Feb 16 Javascript
Vuex的actions属性的具体使用
Apr 14 Javascript
vue调用语音播放的方法
Sep 27 Javascript
vue中动态select的使用方法示例
Oct 28 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
Aug 14 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 mvc开发模式的感想
2011/06/28 PHP
php+mysqli批量查询多张表数据的方法
2015/01/29 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
JavaScript中Math对象使用说明
2008/01/16 Javascript
javascript 四则运算精度修正函数代码
2010/05/31 Javascript
从零开始学习jQuery (六) jquery中的AJAX使用
2011/02/23 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
JavaScript中自带的 reduce()方法使用示例详解
2016/08/10 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
详解AngularJS验证、过滤器、指令
2017/01/04 Javascript
jQuery实现Select下拉列表进行状态选择功能
2017/03/30 jQuery
Ionic3 UI组件之autocomplete详解
2017/06/08 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
js计算两个日期间的天数月的实例代码
2018/09/20 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
Python如何获取系统iops示例代码
2016/09/06 Python
Python神奇的内置函数locals的实例讲解
2019/02/22 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
python变量的存储原理详解
2019/07/10 Python
对python3中的RE(正则表达式)-详细总结
2019/07/23 Python
python requests证书问题解决
2019/09/05 Python
Pandas DataFrame中的tuple元素遍历的实现
2019/10/23 Python
python实现引用其他路径包里面的模块
2020/03/09 Python
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
司机的工作范围及职责
2013/11/13 职场文书
小学运动会表扬稿
2014/01/19 职场文书
支部组织生活会方案
2014/06/10 职场文书
股东出资证明书(正规版)
2014/09/24 职场文书
2014幼儿教师个人工作总结
2014/12/03 职场文书
黑白记忆观后感
2015/06/18 职场文书