Angularjs使用指令做表单校验的方法

发布时间 - 2026-01-11 00:28:12    点击率:

前言

通常,使用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内部设置校验结果即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# angularjs  # 验证指令  # 表单校验  # angularjs2  # 表单验证  # js前端设计模式优化50%表单校验代码示例  # js实现表单校验功能  # 从表单校验看JavaScript策略模式的使用详解  # Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验  # JavaScript 完成注册页面表单校验的实例  # 使用JavaScript进行表单校验功能  # AngularJs表单校验功能实例代码  # AngularJS入门教程之表单校验用法示例  # Vue.js 表单校验插件  # JS实现注册界面表单校验  # 表单  # 提示信息  # 都是  # 请输入  # 仅为  # 自定义  # 不做  # 不符合  # 两项  # 略显  # 用户注册  # 大家多多  # 为空  # 情况下  # 即得  # gt  # type  # controller  # ValidCtrl  # role 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 微信公众帐号开发教程之图文消息全攻略  南京网站制作费用,南京远驱官方网站?  Java垃圾回收器的方法和原理总结  如何在阿里云虚拟主机上快速搭建个人网站?  Python数据仓库与ETL构建实战_Airflow调度流程详解  如何在云服务器上快速搭建个人网站?  微信小程序 input输入框控件详解及实例(多种示例)  实现点击下箭头变上箭头来回切换的两种方法【推荐】  Laravel如何实现多对多模型关联?(Eloquent教程)  如何在服务器上三步完成建站并提升流量?  Laravel怎么在Blade中安全地输出原始HTML内容  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  香港服务器部署网站为何提示未备案?  如何在阿里云部署织梦网站?  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  JavaScript如何实现错误处理_try...catch如何捕获异常?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  如何快速搭建高效服务器建站系统?  网站图片在线制作软件,怎么在图片上做链接?  Laravel如何使用Gate和Policy进行授权?(权限控制)  Laravel如何使用模型观察者?(Observer代码示例)  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  七夕网站制作视频,七夕大促活动怎么报名?  如何在阿里云购买域名并搭建网站?  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  香港服务器如何优化才能显著提升网站加载速度?  北京专业网站制作设计师招聘,北京白云观官方网站?  Python图片处理进阶教程_Pillow滤镜与图像增强  如何用5美元大硬盘VPS安全高效搭建个人网站?  如何在IIS中新建站点并解决端口绑定冲突?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  Laravel如何与Inertia.js和Vue/React构建现代单页应用  如何续费美橙建站之星域名及服务?  C#如何调用原生C++ COM对象详解  如何在万网自助建站中设置域名及备案?  如何自定义建站之星网站的导航菜单样式?  Android中AutoCompleteTextView自动提示  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  如何获取PHP WAP自助建站系统源码?  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  详解Android中Activity的四大启动模式实验简述  简单实现jsp分页  Laravel如何优化应用性能?(缓存和优化命令)  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?