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 相关文章推荐
写的htc的数据表格
Jan 20 Javascript
javascript 跳转代码集合
Dec 03 Javascript
Fixie.js 自动填充内容的插件
Jun 28 Javascript
Javascript异步编程的4种方法让你写出更出色的程序
Jan 17 Javascript
javascript 实现 秒杀,团购 倒计时展示的记录 分享
Jul 12 Javascript
jQuery实现定时读取分析xml文件的方法
Jul 16 Javascript
javascript跨域的方法汇总
Oct 23 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
May 27 Javascript
JS常用倒计时代码实例总结
Feb 07 Javascript
解决vue打包后vendor.js文件过大问题
Jul 03 Javascript
使用layui前端框架弹出form表单以及提交的示例
Oct 25 Javascript
微信小程序绘制半圆(弧形)进度条
Nov 18 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
SONY SRF-40W电路分析
2021/03/02 无线电
用PHP编写PDF文档生成器
2006/10/09 PHP
php实现执行某一操作时弹出确认、取消对话框
2013/12/30 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
2016/06/28 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
JS判断不能为空实例代码
2013/11/26 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
2014/04/16 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
2016/07/11 Javascript
JS控制FileUpload的上传文件类型实例代码
2016/10/07 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
2017/03/30 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
Python编码时应该注意的几个情况
2013/03/04 Python
Python中列表的一些基本操作知识汇总
2015/05/20 Python
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
使用Python读取安卓手机的屏幕分辨率方法
2018/03/31 Python
cmd运行python文件时对结果进行保存的方法
2018/05/16 Python
Python线程同步的实现代码
2018/10/03 Python
在python里从协程返回一个值的示例
2019/02/19 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
Python之Sklearn使用入门教程
2021/02/19 Python
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
美国豪华时尚女性精品店:Kirna Zabête
2018/01/11 全球购物
介绍下Lucene建立索引的过程
2016/03/02 面试题
企业安全生产标语
2014/06/06 职场文书
2016元旦晚会主持词
2015/07/01 职场文书
2016春季运动会开幕词
2016/03/04 职场文书
小学生优秀作文范文(六篇)
2019/07/10 职场文书
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python
Python数组变形的几种实现方法
2022/05/30 Python