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来定位
Feb 20 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
Sep 29 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
Dec 28 Javascript
改变隐藏的input中value的值代码
Dec 30 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
Dec 15 Javascript
react-redux中connect()方法详细解析
May 27 Javascript
基于vue的短信验证码倒计时demo
Sep 13 Javascript
vue+node+webpack环境搭建教程
Nov 05 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
Mar 02 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
May 16 Javascript
vue实现选中效果
Oct 07 Javascript
Vue ​v-model相关知识总结
Jan 28 Vue.js
基于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开发中常用的8个小技巧
2008/08/27 PHP
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
Linux下实现PHP多进程的方法分享
2012/08/16 PHP
php图片的二进制转换实现方法
2014/12/15 PHP
PHP设计模式之状态模式定义与用法详解
2018/04/02 PHP
Smarty模板变量与调节器实例详解
2019/07/20 PHP
php使用curl模拟多线程实现批处理功能示例
2019/07/25 PHP
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
Javascript 兼容firefox的一些问题
2009/05/21 Javascript
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
MvcPager分页控件 适用于Bootstrap
2017/06/03 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
node版本管理工具n包使用教程详解
2018/11/09 Javascript
jQuery实现弹出层效果
2019/12/10 jQuery
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:奇迹哥卡尔秀翻全场
2017/03/28 DOTA
C#返回当前系统所有可用驱动器符号的方法
2015/04/18 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
2019/08/26 Python
python的mysql数据库建立表与插入数据操作示例
2019/09/30 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
HTML5 textarea高度自适应的两种方案
2020/04/08 HTML / CSS
法国和欧洲海边和滑雪度假:Pierre & Vacances
2017/01/04 全球购物
加拿大折扣、优惠券和交易网站:WagJag
2018/02/07 全球购物
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
法制演讲稿
2014/09/10 职场文书
培训学校2015年度工作总结
2015/07/20 职场文书
Python 数据科学 Matplotlib图库详解
2021/07/07 Python
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python
python通过新建环境安装tfx的问题
2022/05/20 Python