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 相关文章推荐
自己实现ajax封装示例分享
Apr 01 Javascript
jquery实现的一个简单进度条效果实例
May 12 Javascript
JavaScript动态改变表格单元格内容的方法
Mar 30 Javascript
Javascript中的getUTCHours()方法使用详解
Jun 10 Javascript
使用JavaScript制作一个简单的计数器的方法
Jul 07 Javascript
图解js图片轮播效果
Dec 20 Javascript
D3.js实现文本的换行详解
Oct 14 Javascript
javascript 判断一个对象为数组的方法
May 03 Javascript
Angularjs实现下拉框联动的示例代码
Aug 22 Javascript
JS实现获取自定义属性data值的方法示例
Dec 19 Javascript
js中Generator函数的深入讲解
Apr 07 Javascript
vue elementUI使用tabs与导航栏联动
Jun 21 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获取MAC地址的函数代码
2011/09/11 PHP
php生成excel文件的简单方法
2014/02/08 PHP
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
2014/02/08 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
CSS图片响应式 垂直水平居中
2015/08/14 Javascript
基于Jquery和html5的7款个性化地图插件
2015/11/17 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
完美解决axios在ie下的兼容性问题
2018/03/05 Javascript
vue axios登录请求拦截器
2018/04/02 Javascript
微信小程序如何获取用户头像和昵称
2019/09/23 Javascript
es6中let和const的使用方法详解
2020/02/24 Javascript
Vue如何实现验证码输入交互
2020/12/07 Vue.js
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
python简单实现获取当前时间
2016/08/27 Python
Python生成随机数组的方法小结
2017/04/15 Python
python方法生成txt标签文件的实例代码
2018/05/10 Python
PyCharm设置护眼背景色的方法
2018/10/29 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
2019/09/16 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
2019/10/04 Python
python标准库sys和OS的函数使用方法与实例详解
2020/02/12 Python
Keras 快速解决OOM超内存的问题
2020/06/11 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
Window10上Tensorflow的安装(CPU和GPU版本)
2020/12/15 Python
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
应届生污水处理求职信
2013/11/06 职场文书
优秀班集体获奖感言
2014/02/03 职场文书
教师专业自荐书范文
2014/02/10 职场文书
安全生产管理责任书
2014/04/16 职场文书
三八妇女节慰问信
2015/02/14 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
微信小程序实现录音Record功能
2021/05/09 Javascript
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python