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勾选指定name的复选框集合并显示的方法
May 18 Javascript
DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
Aug 18 Javascript
JSONObject使用方法详解
Dec 17 Javascript
基于jQuery实现选取月份插件附源码下载
Dec 28 Javascript
Javascript基础_简单比较undefined和null 值
Jun 14 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
Mar 08 Javascript
Vue自定义弹窗指令的实现代码
Aug 13 Javascript
Node.js的进程管理的深入理解
Jan 09 Javascript
JQuery中DOM节点的操作与访问方法实例分析
Dec 23 jQuery
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
Oct 09 Javascript
vue组件添加事件@click.native操作
Oct 30 Javascript
Vue组件更新数据v-model不生效的解决
Apr 02 Vue.js
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 mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
2017/05/05 PHP
php实现映射操作实例详解
2019/10/02 PHP
php array 转json及java 转换 json数据格式操作示例
2019/11/13 PHP
ejs v9 javascript模板系统
2012/03/21 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
checkbox选中与未选中判断示例
2014/08/04 Javascript
页面内容排序插件jSort使用方法
2015/10/10 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
微信小程序 图片上传实例详解
2017/05/05 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
2018/02/26 Javascript
微信小程序在ios下Echarts图表不能滑动的问题解决
2019/07/10 Javascript
jquery ui 实现 tab标签功能示例【测试可用】
2019/07/25 jQuery
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
[56:41]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs OG
2018/04/01 DOTA
Python多进程编程技术实例分析
2014/09/16 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
利用ImageAI库只需几行python代码实现目标检测
2019/08/09 Python
Python面向对象之Web静态服务器
2019/09/03 Python
python 遗传算法求函数极值的实现代码
2020/02/11 Python
python网络编程socket实现服务端、客户端操作详解
2020/03/24 Python
荷兰和比利时时尚鞋店:Van Dalen
2018/04/23 全球购物
关于打架的检讨书
2014/01/17 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
房地产销售主管岗位职责
2015/02/13 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
2015年保卫科工作总结
2015/05/14 职场文书
地心历险记观后感
2015/06/15 职场文书
《称赞》教学反思
2016/02/17 职场文书