angularJs 表单验证指令

本文介绍了一个用于AngularJS的自定义rcSubmit指令,该指令实现了表单验证逻辑,包括字段有效性检查及提交处理。通过结合AngularJS内置的验证功能,此指令能够有效地提升前端表单验证的用户体验。

AngularJS 前端验证指令

Java代码   收藏代码
  1. var rcSubmitDirective = {  
  2.   'rcSubmit': function ($parse) {  
  3.     return {  
  4.       restrict: "A",  
  5.       require: [ "rcSubmit""?form" ],  
  6.       controller: function() {  
  7.         this.attempted = false;  
  8.         var formController = null;  
  9.         this.setAttempted = function() {  
  10.           this.attempted = true;  
  11.         };  
  12.         this.setFormController = function(controller) {  
  13.           formController = controller;  
  14.         };  
  15.         this.needsAttention = function(fieldModelController) {  
  16.           if (!formController) return false;  
  17.           if (fieldModelController) {  
  18.             return fieldModelController.$invalid && (fieldModelController.$dirty || this.attempted);  
  19.           } else {  
  20.             return formController && formController.$invalid && (formController.$dirty || this.attempted);  
  21.           }  
  22.         };  
  23.       },  
  24.       compile: function() {  
  25.         return {  
  26.           pre: function(scope, formElement, attributes, controllers) {  
  27.             var submitController = controllers[0];  
  28.             var formController = controllers.length > 1 ? controllers[1] : null;  
  29.             submitController.setFormController(formController);  
  30.             scope.rc = scope.rc || {};  
  31.             scope.rc[attributes.name] = submitController;  
  32.           },  
  33.           post: function(scope, formElement, attributes, controllers) {  
  34.             var submitController = controllers[0];  
  35.             var formController = controllers.length > 1 ? controllers[1] : null;  
  36.             var fn = $parse(attributes.rcSubmit);  
  37.             formElement.bind("submit", function(event) {  
  38.               submitController.setAttempted();  
  39.               if (!scope.$$phase) scope.$apply();  
  40.               if (!formController.$valid) return;  
  41.               scope.$apply(function() {  
  42.                 fn(scope, {  
  43.                   $event: event  
  44.                 });  
  45.               });  
  46.             });  
  47.           }  
  48.         };  
  49.       }  
  50.     };  
  51.   }  
  52. };  

 验证通过

Java代码   收藏代码
  1. <form name="loginForm" novalidate  
  2.       ng-app="LoginApp" ng-controller="LoginController" rc-submit="login()">  
  3.     <div class="form-group"  
  4.          ng-class="{'has-error': rc.loginForm.needsAttention(loginForm.username)}">  
  5.         <input class="form-control" name="username" type="text"  
  6.                placeholder="Username" required ng-model="session.username" />  
  7.        <span class="help-block"  
  8.              ng-show="rc.form.needsAttention(loginForm.username) &amp;&amp; loginForm.username.$error.required">Required</span>  
  9.     </div>  
  10.     <div class="form-group"  
  11.          ng-class="{'has-error': rc.loginForm.needsAttention(loginForm.password)}">  
  12.         <input class="form-control" name="password" type="password"  
  13.                placeholder="Password" required ng-model="session.password" />  
  14.        <span class="help-block"  
  15.              ng-show="rc.form.needsAttention(loginForm.password) &amp;&amp; loginForm.password.$error.required">Required</span>  
  16.     </div>  
  17.     <div class="form-group">  
  18.         <button type="submit" class="btn btn-primary pull-right"  
  19.                 value="Login" title="Login">  
  20.             <span>Login</span>  
  21.         </button>  
  22.     </div>  
  23. </form>  

样式如下

 前端验证通过会调用login()

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值