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 相关文章推荐
为指定元素增加样式的js代码
Dec 09 Javascript
有趣的JavaScript数组长度问题代码说明
Jan 20 Javascript
js 中{},[]中括号,大括号使用详解
May 12 Javascript
扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
May 17 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
Nov 28 Javascript
JQuery与Ajax调用新浪API获取短网址的代码
Feb 07 Javascript
详解javascript跨浏览器事件处理程序
Mar 27 Javascript
两行代码轻松搞定JavaScript日期验证
Aug 03 Javascript
深入浅析JS是按值传递还是按引用传递(推荐)
Sep 18 Javascript
全屏滚动插件fullPage.js使用实例解析
Oct 21 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
Apr 10 Javascript
javascript算法之二叉搜索树的示例代码
Sep 12 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小程序自动提交到自助友情连接
2009/11/24 PHP
PHP下编码转换函数mb_convert_encoding与iconv的使用说明
2009/12/16 PHP
简单的php+mysql聊天室实现方法(附源码)
2016/01/05 PHP
php简单实现数组分页的方法
2016/04/30 PHP
php抽象类和接口知识点整理总结
2019/08/02 PHP
制作特殊字的脚本
2006/06/26 Javascript
JavaScript高级程序设计
2006/12/29 Javascript
基于jquery的lazy loader插件实现图片的延迟加载[简单使用]
2011/05/07 Javascript
JS中Iframe之间传值的方法
2013/03/11 Javascript
javascript-表格排序(降序/反序)实现介绍(附图)
2013/05/30 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
jQuery UI实现动画效果代码分享
2018/08/19 jQuery
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
[04:54]DOTA2 2017国际邀请赛:上届冠军WINGS采访短片
2017/08/09 DOTA
python字典get()方法用法分析
2015/04/17 Python
Python中super()函数简介及用法分享
2016/07/11 Python
Python调用C# Com dll组件实战教程
2017/10/12 Python
详解python里使用正则表达式的全匹配功能
2017/10/19 Python
python实现一个简单的并查集的示例代码
2018/03/19 Python
python 识别图片中的文字信息方法
2018/05/10 Python
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
Python Django view 两种return的实现方式
2020/03/16 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
纯css3制作煽动翅膀的蝴蝶的示例
2018/04/23 HTML / CSS
html5 迷宫游戏(碰撞检测)实例一
2013/07/25 HTML / CSS
英国潮流网站:END.(全球免邮)
2017/01/16 全球购物
小蚁科技官方商店:YI Technology
2019/08/23 全球购物
金士达面试非笔试
2012/03/14 面试题
linux面试题参考答案(10)
2016/10/26 面试题
《蓝色的树叶》教学反思
2014/02/24 职场文书
一文帮你理解PReact10.5.13源码
2021/04/03 Javascript