AngularJs表单校验功能实例代码


Posted in Javascript onFebruary 09, 2017

废话不多说了,具体代码如下所示:

<!DOCTYPE html>
<html ng-app="angularFormCheckModule">
 <head>
  <meta charset="UTF-8">
  <title>angular表单校验</title>
  <link rel="stylesheet" href="../css/bootstrap.min.css" rel="external nofollow" />
  <style>
   span{
    color: red;
   }
  </style>
 </head>
 <body ng-controller="angularFormCheckCtrl">
  <!--使用angular校验,每一个校验的项都必须用ng-model,不然无法执行在脏检查,就无法校验-->
  <form name="angularForm" novalidate method="post">
   <table class="table table-bordered">
    <tr>
     <td>用户名</td>
     <td>
      <input type="number" required="required" ng-model="user.userName" name="userName" ng-minlength="6"/>
      <!--angularForm.userName.$dirty检查是否是第一次输入!网上有很多种方法校验是否是第一次输入-->
      <span class="warning" ng-show="angularForm.userName.$dirty && angularForm.userName.$error.required">*</span>
      <span class="warning" ng-show="angularForm.userName.$error.number">只能输入数字</span>
      <span class="warning" ng-show="angularForm.userName.$error.minlength">最少为6位数</span>
     </td>
    </tr>
    <tr>
     <td>密码</td>
     <td>
      <!--这里的id,一定要等于compare-pwd的值,因为指令里面是根据Id取值的-->
      <input type="password" required="required" ng-minlength="6" name="pwd" ng-model="user.password" id="pwd"/>
      <!--angularForm.pwd.$pristine首次输入,不太清楚的就自己运行,去掉条件一个一个的试!-->
      <span class="warning" ng-show="!angularForm.pwd.$pristine && angularForm.pwd.$error.required">*</span>
      <span class="warning" ng-show="angularForm.pwd.$error.minlength">最少为6位数</span>
     </td>
    </tr>
    <tr>
     <td>确认密码</td>
     <td>
      <!--这里compare-pwd的值,要等于被比较的对象的name属性值,即第一个密码框的name值-->
      <input type="password" required="required" name="pwd2" compare-pwd="pwd" ng-model="pwd2"/>
      <span class="warning" ng-show="angularForm.pwd2.$error.required">*</span>
      <!--注意这里的pwdmatch,是指令里面设置的-->
      <span class="warning" ng-show="angularForm.pwd2.$error.pwdmatch">X</span>
      <span class="warning" ng-show="angularForm.pwd2.$valid" style="color: green;">OK</span>
      <!--
       其实这种事最简单的校验方式,不用写指令!!!
       <span ng-show="user.password !=pwd2">两次密码输入不一致</span>       
      -->
     </td>
    </tr>
    <tr>
     <td>手机</td>
     <td>
      <!--pattern正则表达式校验输入内容-->
      <input type="number" required="required" name="phone" ng-model="user.phone" ng-pattern="/^1[3|4|5|7|8]\d{9}$/">
      <span class="warning" ng-show="angularForm.phone.$error.required">*</span>
      <span class="warning" ng-show="angularForm.phone.$error.number">只能输入数字</span>
      <span class="warning" ng-show="angularForm.phone.$error.pattern">手机格式不正确</span>
     </td>
    </tr>
    <tr>
     <td>邮箱</td>
     <td>
      <input type="email" required="required" ng-model="user.email" name="email"/>
      <span class="warning" ng-show="angularForm.email.$error.required">*</span>
      <span class="warning" ng-show="angularForm.email.$error.email">邮箱格式不正确</span>
     </td>
    </tr>
    <tr>
     <td>URL</td>
     <td>
      <input type="url" required="required" ng-model="user.url" name="url"/>
      <span class="warning" ng-show="angularForm.url.$error.required">*</span>
      <span class="warning" ng-show="angularForm.url.$error.url">URL格式不正确</span>
     </td>
    </tr>
    <tr>
     <td>(注:*为必填)</td>
     <td>
      <input type="submit" value="提交" ng-disabled="!angularForm.$valid" class="btn btn-success"/>
     </td>
    </tr>
   </table>
  </form>
 </body>
 <script type="text/javascript" src="../js/jquery.min.js" ></script>
 <script type="text/javascript" src="../js/angular-1.2.22.js" ></script>
 <script type="text/javascript" src="../js/angularFormCheck.js" ></script>
</html>

js代码(除了指令意外,没什么可用的,写出来只是为了,说一下mvc模式而已!)

var app = angular.module("angularFormCheckModule",[]);
/*这里使用MVC的模式(用来举例说明MVC而已)*/
app.controller("angularFormCheckCtrl",function($scope,angularFormCheckFactory){//function里的参数写你在函数里需要用到的
 $scope.testVar = angularFormCheckFactory.getTest();//这里就能取到$scope.testVar的值为---"练习angular表单校验";
 $scope.user = {};
 $scope.test= "sss";
});
/*自己可以去看factory、service、providers的区别(http://www.oschina.net/translate/angularjs-factory-vs-service-vs-provider)*/
/*用 Factory 就是创建一个对象,为它添加属性,然后把这个对象返回出来。*/
app.factory('angularFormCheckFactory',function(){
 //这里写自己的业务逻辑
 var test = "练习angular表单校验";
 var service = {};//自定义一个对象
 service.getTest = function(){//给对象添加方法
  return test;
 }
 return service;//返回自定义的service对象!!!
});
/*自定义指令--比较两个密码是否相等.angular的指令是驼峰的形式(这里是comparePwd页面就是compare-pwd)*/
app.directive('comparePwd',function(){
 /*angular 自定义指令,可上网自行查找*/
 return{
  require : 'ngModel',
  /*scope表示作用域,elem表示使用这个指令的元素对象(这里指第二个密码框),attrs。。。ctrl。。。*/
  link : function(scope,elem,attrs,ctrl){
   /*写自己的业务逻辑*/
   //注意这样取值的话,第一密码框的Id值必须要设置且必须与第二个密码框的compare-pwd属性的值相同
   var firstPwdIdObj = "#" + attrs.comparePwd;
   $(elem).add(firstPwdIdObj).on('keyup',function(){
    /*手动执行脏检查*/
    scope.$apply(function(){
     //$(firstPwdIdObj).val()表示第一个密码框的值。elem.val()表示第二个密码框的值
     var flag = elem.val() === $(firstPwdIdObj).val();
     //alert(flag+",--"+elem.val()+",--"+$(firstPwdIdObj).val());
     ctrl.$setValidity("pwdmatch",flag);//flag,表示是否相等。pwdmatch用于$error时的标识符,注意看页面,$setValidity是require中ngModel的方法!
    });
   });
  }
 }
});

下面看一段代码关于AngularJs获取焦点与失去焦点时的表单验证

<!DOCTYPE html> 
<html ng-app="formExample"> 
<head> 
  <meta charset="UTF-8"> 
  <title></title> 
  <script src="../js/angular.js"></script> 
  <script> 
    angular.module('formExample', []) 
        .controller('FormController', ['$scope', function($scope) 
        { 
          $scope.userType = 'guest'; 
          $scope.change = false; 
        }]); 
  </script> 
</head> 
<body> 
<form name="myForm" ng-controller="FormController"> 
  userType: <input name="input" ng-model="userType" ng-blur="change=true" ng-focus="change=false" required> 
  <span class="error" ng-show="myForm.input.$error.required && change">必填项</span><br> 
</form> 
</body> 
</html>

以上所述是小编给大家介绍的AngularJs表单校验功能实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
如何设置iframe高度自适应在跨域情况下的可用方法
Sep 06 Javascript
JS弹出层单纯的绝对定位居中示例代码
Feb 18 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
Feb 19 Javascript
JAVA四种基本排序方法实例总结
Jul 24 Javascript
JavaScript引用类型和基本类型详解
Jan 06 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Dec 15 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
Jul 09 Javascript
form表单序列化详解(推荐)
Aug 15 Javascript
vue系列之动态路由详解【原创】
Sep 10 Javascript
angularjs的单选框+ng-repeat的实现方法
Sep 12 Javascript
vue input标签通用指令校验的实现
Nov 05 Javascript
Vue 一键清空表单的实现方法
Feb 07 Javascript
javascript 显示全局变量与隐式全局变量的区别
Feb 09 #Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
Feb 09 #Javascript
简单谈谈Javascript函数中的arguments
Feb 09 #Javascript
javascript 中设置window.location.href跳转无效问题解决办法
Feb 09 #Javascript
微信小程序之picker日期和时间选择器
Feb 09 #Javascript
BootStrap 弹出层代码
Feb 09 #Javascript
jQuery插件form-validation-engine正则表达式操作示例
Feb 09 #Javascript
You might like
用PHP制作静态网站的模板框架
2006/10/09 PHP
php将文本文件转换csv输出的方法
2014/12/31 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
Js组件的一些写法
2010/09/10 Javascript
js document.write()使用介绍
2014/02/21 Javascript
js 判断控件获得焦点的示例代码
2014/03/04 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
jquery实现的代替传统checkbox样式插件
2015/06/19 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
2016/05/25 Javascript
js初始化验证实例详解
2016/11/26 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
原生JS+CSS实现炫酷重力模拟弹跳系统的登录页面
2017/11/01 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
[56:01]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 Effect vs EG
2018/03/31 DOTA
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
python+logging+yaml实现日志分割
2019/07/22 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
Python如何实现强制数据类型转换
2019/11/22 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
CSS3中使用RGBA设置透明度的示例
2015/08/04 HTML / CSS
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
2016/12/22 HTML / CSS
localStorage 设置过期时间的方法实现
2018/12/21 HTML / CSS
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
高中生毕业自我鉴定
2013/10/10 职场文书
生产车间主任的个人自我鉴定
2013/10/25 职场文书
财产分割协议书范本
2014/11/03 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书
python实现语音常用度量方法的代码详解
2021/05/25 Python