Angularjs使用指令做表单校验的方法


Posted in Javascript onMarch 31, 2017

前言

通常,使用angular做表单验证,一般都是把验证规则单独写为service,然后通过依赖注入的方式调用。在个别情况下,例如用户注册表单,需要根据用户输入给出不同提示信息,使用service略显不合适宜,所以可以采用指令的方式。

简易表单

如下为一个简易表单,有四项提示信息,依据状态呈现。校验规则为数字,大写字母,小写字母至少出现两项,通过正则配合ng-pattern能够实现相同的效果,此处仅为引入指令校验,不做深究。其中,user-validator为自定义指令。

<form class="form-horizontal" name="form" role="form" ng-controller="ValidCtrl">
 <div class="form-group">
  <label for="user" class="col-sm-2 control-label" >用户名</label>
  <div class="col-sm-5">
   <input type="text" ng-model="user" name="user" id="user" user-validator class="form-control" required="required">
  </div>
  <label class="col-sm-5" ng-show="form.user.$pristine">请输入用户名</label>
  <label class="col-sm-5" ng-show="form.user.$error.required && form.user.$dirty">
   用户名不能为空
  </label>
  <label class="col-sm-5" ng-show="form.user.$error.defined && form.user.$dirty">
   用户名不符合规则
  </label>
  <label class="col-sm-5" ng-show="form.user.$valid && form.user.$dirty">
   用户名有效
  </label>
 </div>
</form>

校验指令

校验指令代码如下:

angular.module('shuffleApp', [])
 .directive('userValidator', ['$log', function($log) {
   return {
     restrict: 'A',
     require: 'ngModel',
     link: function($scope, $element, $attrs, $ngModelCtrl) {
       var verifyRule = [/^\d+$/, /^[a-z]+$/, /^[A-Z]+$/];
       var verify = function(input) {
         return !(verifyRule[0].test(input) || 
              verifyRule[1].test(input) || 
              verifyRule[2].test(input));
       };
       $ngModelCtrl.$parsers.push(function(input) {
         var validity = verify(input);
         $ngModelCtrl.$setValidity('defined', validity);
         return validity ? input : false;
       });
       $ngModelCtrl.$formatters.push(function(input) {
         var validity = verify(input);
         $ngModelCtrl.$setValidity('defined', validity);
         return validity ? input : false;
       })
     }
   }
  }]);

指令内容非常简单,检测是否全为数字,小写字母,大写字母,然后取反即得到校验结果。然后在$parser, $formatter内部设置校验结果即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery 常用操作代码
Mar 14 Javascript
jquery限制输入字数,并提示剩余字数实现代码
Dec 24 Javascript
js比较和逻辑运算符的介绍
Mar 10 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
Apr 10 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
Oct 17 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
May 05 Javascript
JavaScript中各种引用类型的常用操作方法小结
May 05 Javascript
JS如何判断json是否为空
Jul 06 Javascript
jQuery实现的自动加载页面功能示例
Sep 04 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
Dec 26 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
Feb 12 Javascript
详解ES6 CLASS在微信小程序中的应用实例
Apr 24 Javascript
JS正则获取HTML元素的方法
Mar 31 #Javascript
JS+CSS实现下拉刷新/上拉加载插件
Mar 31 #Javascript
ES6中Generator与异步操作实例分析
Mar 31 #Javascript
微信公众号菜单配置微信小程序实例详解
Mar 31 #Javascript
ES6中Iterator与for..of..遍历用法分析
Mar 31 #Javascript
node.js平台下的mysql数据库配置及连接
Mar 31 #Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
Mar 31 #Javascript
You might like
PHP数组操作汇总 php数组的使用技巧
2011/07/17 PHP
在PHP上显示JFreechart画的统计图方法
2013/11/03 PHP
PHP的变量类型和作用域详解
2014/03/12 PHP
C#静态方法与非静态方法实例分析
2014/09/22 PHP
Zend Framework教程之Application和Bootstrap用法详解
2016/03/10 PHP
参考:关于Javascript中实现暂停的几篇文章
2007/03/04 Javascript
使一个函数作为另外一个函数的参数来运行的javascript代码
2007/08/13 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
jquery使用正则表达式验证email地址的方法
2015/01/22 Javascript
深入浅出理解javaScript原型链
2015/05/09 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
js实现简单的计算器功能
2017/01/16 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
Angular.js中控制器之间的传值详解
2017/04/24 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
JavaScript实现tab栏切换效果
2020/03/16 Javascript
ng-alain的sf如何自定义部件的流程
2020/06/12 Javascript
javascript使用canvas实现饼状图效果
2020/09/08 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
python3将视频流保存为本地视频文件
2018/06/20 Python
Python不使用int()函数把字符串转换为数字的方法
2018/07/09 Python
对python 命令的-u参数详解
2018/12/03 Python
Python通过文本和图片生成词云图
2020/05/21 Python
Canvas 帧动画吃苹果小游戏
2020/08/05 HTML / CSS
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
波兰最早的运动鞋精品店之一:Street Supply
2019/08/29 全球购物
高二政治教学反思
2014/02/01 职场文书
租房协议书
2014/04/10 职场文书
社区春季防火方案
2014/06/02 职场文书
应届生求职信范文
2014/06/30 职场文书
公司股东合作协议书
2014/09/14 职场文书
2015小学师德工作总结
2015/07/21 职场文书
Python实战之大鱼吃小鱼游戏的实现
2022/04/01 Python