angularJs 表单验证指令

本文介绍了如何使用AngularJS创建自定义验证指令,包括指令的实现逻辑和在表单中的应用,确保用户输入符合预设规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

angularJs 前端验证指令

var rcSubmitDirective = {
  'rcSubmit': function ($parse) {
    return {
      restrict: "A",
      require: [ "rcSubmit", "?form" ],
      controller: function() {
        this.attempted = false;
        var formController = null;
        this.setAttempted = function() {
          this.attempted = true;
        };
        this.setFormController = function(controller) {
          formController = controller;
        };
        this.needsAttention = function(fieldModelController) {
          if (!formController) return false;
          if (fieldModelController) {
            return fieldModelController.$invalid && (fieldModelController.$dirty || this.attempted);
          } else {
            return formController && formController.$invalid && (formController.$dirty || this.attempted);
          }
        };
      },
      compile: function() {
        return {
          pre: function(scope, formElement, attributes, controllers) {
            var submitController = controllers[0];
            var formController = controllers.length > 1 ? controllers[1] : null;
            submitController.setFormController(formController);
            scope.rc = scope.rc || {};
            scope.rc[attributes.name] = submitController;
          },
          post: function(scope, formElement, attributes, controllers) {
            var submitController = controllers[0];
            var formController = controllers.length > 1 ? controllers[1] : null;
            var fn = $parse(attributes.rcSubmit);
            formElement.bind("submit", function(event) {
              submitController.setAttempted();
              if (!scope.$$phase) scope.$apply();
              if (!formController.$valid) return;
              scope.$apply(function() {
                fn(scope, {
                  $event: event
                });
              });
            });
          }
        };
      }
    };
  }
};

 验证通过

<form name="loginForm" novalidate
      ng-app="LoginApp" ng-controller="LoginController" rc-submit="login()">
    <div class="form-group"
         ng-class="{'has-error': rc.loginForm.needsAttention(loginForm.username)}">
        <input class="form-control" name="username" type="text"
               placeholder="Username" required ng-model="session.username" />
       <span class="help-block"
             ng-show="rc.form.needsAttention(loginForm.username) &amp;&amp; loginForm.username.$error.required">Required</span>
    </div>
    <div class="form-group"
         ng-class="{'has-error': rc.loginForm.needsAttention(loginForm.password)}">
        <input class="form-control" name="password" type="password"
               placeholder="Password" required ng-model="session.password" />
       <span class="help-block"
             ng-show="rc.form.needsAttention(loginForm.password) &amp;&amp; loginForm.password.$error.required">Required</span>
    </div>
    <div class="form-group">
        <button type="submit" class="btn btn-primary pull-right"
                value="Login" title="Login">
            <span>Login</span>
        </button>
    </div>
</form>

样式如下

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

 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值