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 相关文章推荐
javascript iframe编程相关代码
Dec 28 Javascript
jquery 可拖拽的窗体控件实现代码
Mar 21 Javascript
Javascript数组的排序 sort()方法和reverse()方法
Jun 04 Javascript
Jquery实现搜索框提示功能示例代码
Aug 13 Javascript
基于jquery css3实现点击动画弹出表单源码特效
Aug 31 Javascript
JS获取checkbox的个数简单实例
Aug 19 Javascript
js仿手机页面文件下拉刷新效果
Oct 14 Javascript
微信小程序 教程之WXSS
Oct 18 Javascript
seajs学习教程之基础篇
Oct 20 Javascript
JavaScript实现图片本地预览功能【不用上传至服务器】
Sep 20 Javascript
vue点击当前路由高亮小案例
Sep 26 Javascript
easyUI 实现的后台分页与前台显示功能示例
Jun 01 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中使用PDF文档功能
2006/10/09 PHP
php过滤危险html代码
2008/08/18 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
PHP实现的二分查找算法实例分析
2017/12/19 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
Prototype Function对象 学习
2009/07/12 Javascript
css值转换成数值请抛弃parseInt
2011/10/24 Javascript
javascript实现分栏显示小技巧附图
2014/10/13 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
jQuery实现的图片分组切换焦点图插件
2015/01/06 Javascript
jQuery使用animate创建动画用法实例
2015/08/07 Javascript
基于jQuery+PHP+Mysql实现在线拍照和在线浏览照片
2015/09/06 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
JS 数组随机洗牌的实例代码
2018/09/12 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
vue 中固定导航栏的实例代码
2019/11/01 Javascript
Python使用文件锁实现进程间同步功能【基于fcntl模块】
2017/10/16 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
2020/05/12 Python
Python sublime安装及配置过程详解
2020/06/29 Python
Matplotlib 折线图plot()所有用法详解
2020/07/28 Python
python openCV自制绘画板
2020/10/27 Python
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
护理个人求职信范文
2014/01/08 职场文书
计算机网络及管理学专业求职信
2014/06/05 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
检讨书怎么写
2015/05/07 职场文书
毕业论文答辩开场白
2015/05/27 职场文书
劳动合同变更协议书范本
2019/04/18 职场文书
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android
MySQL GTID复制的具体使用
2022/05/20 MySQL
MyBatis XPathParser解析器使用范例详解
2022/07/15 Java/Android