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 相关文章推荐
javascript下查找父节点的简单方法
Aug 13 Javascript
HTML Dom与Css控制方法
Oct 25 Javascript
jQuery学习笔记之Ajax用法实例详解
Dec 01 Javascript
jQuery插件datatables使用教程
Apr 21 Javascript
JavaScript实现通过select标签跳转网页的方法
Sep 29 Javascript
常用原生js自定义函数总结
Nov 20 Javascript
Node.js连接postgreSQL并进行数据操作
Dec 18 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
Jan 09 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
Feb 17 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
Jul 13 Javascript
VUE预渲染及遇到的坑
Sep 03 Javascript
Koa日志中间件封装开发详解
Mar 09 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网页游戏学习之Xnova(ogame)源码解读(十六)
2014/06/30 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
2014/12/24 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
Yii2简单实现给表单添加验证码的方法
2016/07/18 PHP
PHP不使用递归的无限级分类简单实例
2016/11/05 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
window.addeventjs事件驱动函数集合addEvent等
2008/02/19 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
ExtJS4 动态生成的grid导出为excel示例
2014/05/02 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
学习使用AngularJS文件上传控件
2016/02/16 Javascript
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
2017/01/19 Javascript
js遍历json的key和value的实例
2017/01/22 Javascript
原生JS实现圣旨卷轴展开效果
2017/03/06 Javascript
Vue2 配置 Axios api 接口调用文件的方法
2017/11/13 Javascript
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
js中的闭包实例展示
2018/11/01 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
如何使用 vue-cli 创建模板项目
2020/11/19 Vue.js
[01:25]2015国际邀请赛最佳短片奖——斧王《拆塔英雄:天赋异禀》
2015/09/22 DOTA
python编写爬虫小程序
2015/05/14 Python
Python xlrd excel文件操作代码实例
2020/03/10 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
2020/06/01 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
2020/12/16 Python
暇步士官网:Hush Puppies
2016/09/22 全球购物
广告学专业推荐信范文
2013/11/23 职场文书
肯尼迪就职演说稿
2013/12/31 职场文书
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
大学生入党自荐书
2015/03/05 职场文书
2016国培学习心得体会
2016/01/08 职场文书
php引用传递
2021/04/01 PHP