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 相关文章推荐
window.addeventjs事件驱动函数集合addEvent等
Feb 19 Javascript
XENON基于JSON变种
Jul 27 Javascript
理解JavaScript的prototype属性
Feb 11 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
Nov 25 Javascript
jQuery Ajax中的事件详细介绍
Apr 16 Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
Mar 06 Javascript
AngularJS中如何使用echart插件示例详解
Oct 26 Javascript
vue.js项目nginx部署教程
Apr 05 Javascript
JavaScript面试技巧之数组的一些不low操作
Mar 22 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
Apr 08 Javascript
koa+mongoose实现简单增删改查接口的示例代码
May 13 Javascript
js实现随机点名
Jan 19 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
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
PHP中创建空文件的代码[file_put_contents vs touch]
2012/01/20 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
2019/02/25 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
jquery下组织javascript代码(js函数化)
2010/08/25 Javascript
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
JS实现局部选择打印和局部不选择打印
2014/04/03 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
2017/08/15 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
js异步上传多张图片插件的使用方法
2018/10/22 Javascript
微信小程序图表插件wx-charts用法实例详解
2019/05/20 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
[58:42]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第一局
2016/02/27 DOTA
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
新手该如何学python怎么学好python?
2008/10/07 Python
python获得图片base64编码示例
2014/01/16 Python
Python函数式编程指南(二):从函数开始
2015/06/24 Python
通过Python 获取Android设备信息的轻量级框架
2017/12/18 Python
关于Python正则表达式 findall函数问题详解
2018/03/22 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
浅谈对python中if、elif、else的误解
2020/08/20 Python
H5仿微信界面教程(一)
2017/07/05 HTML / CSS
HTML5制作表格样式
2016/11/15 HTML / CSS
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
办公室文秘自我评价
2013/09/21 职场文书
员工规章制度范本
2015/08/07 职场文书
2019单位介绍信怎么写
2019/06/24 职场文书