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动画效果-fadeIn fadeOut淡入浅出示例代码
Aug 28 Javascript
js综合应用实例简单的表格统计
Sep 03 Javascript
浅谈javascript中for in 和 for each in的区别
Apr 23 Javascript
JQuery实现的按钮倒计时效果
Dec 23 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
Jun 17 Javascript
JavaScript自学笔记(必看篇)
Jun 23 Javascript
jquery实现input框获取焦点的方法
Feb 06 Javascript
JS实现课堂随机点名和顺序点名
Mar 09 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
Apr 27 Javascript
vue-router 组件复用问题详解
Jan 22 Javascript
详解微信小程序与内嵌网页交互实现支付功能
Oct 22 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
May 08 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
最省空间的计数器
2006/10/09 PHP
使用PHP导出Word文档的原理和实例
2013/10/21 PHP
php提示Warning:mysql_fetch_array() expects的解决方法
2014/12/16 PHP
Laravel 5.0 发布 新版本特性详解
2015/02/10 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
document.compatMode介绍
2009/05/21 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
js实现楼层导航功能
2017/02/23 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
AngularJS学习笔记之表单验证功能实例详解
2017/07/06 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
JS写滑稽笑脸运动效果
2020/05/28 Javascript
解决vue的router组件component在import时不能使用变量问题
2020/07/26 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
2020/09/04 Javascript
uniapp实现横向滚动选择日期
2020/10/21 Javascript
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
python关键字and和or用法实例
2015/05/28 Python
关于Python中异常(Exception)的汇总
2017/01/18 Python
Python内置函数reversed()用法分析
2018/03/20 Python
基于pandas中expand的作用详解
2019/12/17 Python
Python使用grequests并发发送请求的示例
2020/11/05 Python
python爬虫泛滥的解决方法详解
2020/11/25 Python
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
企业管理毕业生求职信
2014/03/11 职场文书
学校安全责任书
2014/04/14 职场文书
档案保密承诺书
2014/06/03 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
2015年社区卫生工作总结
2015/04/21 职场文书
活动总结模板大全
2015/05/11 职场文书
2015年网管个人工作总结
2015/05/22 职场文书
美容院员工规章制度
2015/08/05 职场文书
保险公司岗前培训工作总结
2015/10/24 职场文书
Python爬虫实战之爬取携程评论
2021/06/02 Python
go开发alertmanger实现钉钉报警
2021/07/16 Golang