每当一个或另一个字段使用Angular指令更改模型(每次击键)时,验证密码并确认密码字段

OGZ编码器

我目前有一个Angular Directive,它可以验证密码并确认密码字段是否匹配。它可以工作到一定程度,如果密码不匹配,则确实会引发错误。但是,直到您在两个字段中都输入了数据,它才会引发错误。如何做到这一点,以便在一个字段或另一个字段中输入数据后立即引发密码不匹配的错误?

这是指令(必须将其添加到需要匹配的两个字段中):

.directive('passwordVerify', function() {
   return {
      restrict: 'A', // only activate on element attribute
      require: '?ngModel', // get a hold of NgModelController
      link: function(scope, elem, attrs, ngModel) {
         //if (!ngModel) return; // do nothing if no ng-model

         // watch own value and re-validate on change
         scope.$watch(attrs.ngModel, function() {
            validate();
         });

         // observe the other value and re-validate on change
         attrs.$observe('passwordVerify', function(val) {
            validate();
         });

         var validate = function() {
            // values
            var val1 = ngModel.$viewValue;
            var val2 = attrs.passwordVerify;

           // set validity
           ngModel.$setValidity('passwordVerify', !val1 || !val2 || val1 === val2);
        };
      }
   };
});

这是我形式的指令:

<div class="small-5 columns">
    <div class="small-12 columns">
        <label>
            Password
            <input 
                ng-class="{ notvalid: submitted && add_user_form.user_password.$invalid }" 
                class="instructor-input" 
                id="user_password" 
                type="password" 
                name='user_password' 
                placeholder="password" 
                value='' 
                required 
                ng-model="user.user_password" 
                password-verify="[[user.confirm_password]]"
            >
        </label>
        <p class="help-text">
            <span class="   ">Required</span>
        </p>
        <div 
            class="help-block" 
            ng-messages="add_user_form.user_password.$error" 
            ng-show="add_user_form.user_password.$touched || add_user_form.user_password.$dirty"
        >
        <span class="red">
            <div ng-messages-include="/app/views/messages.html" ></div>
        </span>
    </div>
</div>
<div class="small-12 columns">
    <label>
        Confirm Password
        <input 
            ng-class="{ notvalid: submitted && add_user_form.confirm_password.$invalid }" 
            class="instructor-input" 
            id="confirm_password" 
            ng-model="user.confirm_password" 
            name="confirm_password" 
            type="password" 
            placeholder="confirm password" 
            name="user_confirm_passsword" 
            required 
            password-verify="[[user.user_password]]"
        >
    </label>
    <p class="help-text">
        <span class="   ">
            Enter matching password
        </span>
    </p>
    <div 
        class="help-block" 
        ng-messages="add_user_form.confirm_password.$error" 
        ng-show="add_user_form.confirm_password.$dirty || add_user_form.confirm_password.$touched "
    >
        <span class="red">
            <div 
                ng-messages-include="/app/views/messages.html"
            ></div>
        </span>
    </div>
</div>
开发者033

只需更改最后的检查:

ngModel.$setValidity('passwordVerify', !val1 || !val2 || val1 === val2);

到:

ngModel.$setValidity('passwordVerify', val1 === val2);

这是一个工作版本:

(function() {
  "use strict";
  angular
    .module('app', ['ngMessages'])
    .controller('mainCtrl', mainCtrl)
    .directive('passwordVerify', passwordVerify);

  function mainCtrl($scope) {
    // Some code
  }

  function passwordVerify() {
    return {
      restrict: 'A', // only activate on element attribute
      require: '?ngModel', // get a hold of NgModelController
      link: function(scope, elem, attrs, ngModel) {
        if (!ngModel) return; // do nothing if no ng-model

        // watch own value and re-validate on change
        scope.$watch(attrs.ngModel, function() {
          validate();
        });

        // observe the other value and re-validate on change
        attrs.$observe('passwordVerify', function(val) {
          validate();
        });

        var validate = function() {
          // values
          var val1 = ngModel.$viewValue;
          var val2 = attrs.passwordVerify;

          // set validity
          ngModel.$setValidity('passwordVerify', val1 === val2);
        };
      }
    }
  }
})();
<html ng-app="app">

<head>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.min.js"></script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.min.css" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/js/bootstrap.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-messages/1.5.7/angular-messages.min.js"></script>
</head>

<body ng-controller="mainCtrl">
  <form name="add_user_form">
    <div class="col-md-12">
      <div class="form-group" ng-class="{ 'has-error' : add_user_form.user_password.$dirty && add_user_form.user_password.$invalid }">
        <p class="help-text">Enter password</p>
        <input type="password" class="form-control" id="user_password" name="user_password" placeholder="password" required ng-model="user.user_password" password-verify="{{user.confirm_password}}">
        <div class="help-block" ng-messages="add_user_form.user_password.$error" ng-if="add_user_form.user_password.$dirty">
          <p ng-message="required">This field is required</p>
          <p ng-message="minlength">This field is too short</p>
          <p ng-message="maxlength">This field is too long</p>
          <p ng-message="required">This field is required</p>
          <p ng-message="passwordVerify">No match!</p>
        </div>
      </div>
      <div class="form-group" ng-class="{ 'has-error' : add_user_form.confirm_password.$dirty && add_user_form.confirm_password.$invalid }">
        <p class="help-text">Enter matching password</p>
        <input class="form-control" id="confirm_password" ng-model="user.confirm_password" name="confirm_password" type="password" placeholder="confirm password" required password-verify="{{user.user_password}}">
        <div class="help-block" ng-messages="add_user_form.confirm_password.$error" ng-if="add_user_form.confirm_password.$dirty">
          <p ng-message="required">This field is required</p>
          <p ng-message="minlength">This field is too short</p>
          <p ng-message="maxlength">This field is too long</p>
          <p ng-message="required">This field is required</p>
          <p ng-message="passwordVerify">No match!</p>
        </div>
      </div>
    </div>
  </form>
</body>

</html>

希望对您有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

每当一个或另一个字段使用Angular指令更改模型(每次击键)时,都要验证密码并确认密码字段

来自分类Dev

如何在iOS Swift的密码字段中将点更改为另一个字符

来自分类Dev

使用 keyUp 密码确认时,样式仅在一个字段中工作

来自分类Dev

每当另一个字段值为零时,返回一个字段的最大值

来自分类Dev

更新一个DataGridView字段时如何更改另一个字段?

来自分类Dev

django测试-确认模型是唯一的,具体取决于另一个字段

来自分类Dev

Laravel Nova 在创建时使用另一个字段的内容填充字段

来自分类Dev

当另一个字段值更改时更新一个字段值

来自分类Dev

一个字段基于另一个字段的求和

来自分类Dev

Python Django使用同一模型中的另一个字段填充模型中的字段

来自分类Dev

如何在Rails验证中使用另一个字段

来自分类Dev

用于在MySQL的密码末尾附加另一个字段值(此处为id)

来自分类Dev

Django-根据另一个字段更新模型字段

来自分类Dev

从另一个字段获取Django模型字段

来自分类Dev

Django根据另一个字段的值验证字段

来自分类Dev

取决于另一个字段的条件字段验证

来自分类Dev

如何验证基于另一个字段的字段?

来自分类Dev

在DRF的字段级别验证中获取另一个字段的值

来自分类Dev

将另一个字段从字段添加到验证器中

来自分类Dev

如何验证基于另一个字段的字段?

来自分类Dev

Bootstrap x-editable:根据另一个字段的值验证字段

来自分类Dev

Rails - 如果另一个字段不为空,则验证字段

来自分类Dev

在Oracle中更改另一个字段的值时更改表字段的值

来自分类Dev

当使用ORDER BY另一个字段时,如何仅对一个字段使用DISTINCT?

来自分类Dev

使用分组依据-尝试将一个字段与另一个字段的MIN匹配时适当的聚合

来自分类Dev

字段取决于另一个字段时通知属性更改的最佳方法

来自分类Dev

如何仅使用一个字段进行网页身份验证(而不是用户名和密码)

来自分类Dev

Angular 8更新文本字段以响应另一个字段更改

来自分类Dev

当另一个字段更新时更新字段的模式的标准实践

Related 相关文章

  1. 1

    每当一个或另一个字段使用Angular指令更改模型(每次击键)时,都要验证密码并确认密码字段

  2. 2

    如何在iOS Swift的密码字段中将点更改为另一个字符

  3. 3

    使用 keyUp 密码确认时,样式仅在一个字段中工作

  4. 4

    每当另一个字段值为零时,返回一个字段的最大值

  5. 5

    更新一个DataGridView字段时如何更改另一个字段?

  6. 6

    django测试-确认模型是唯一的,具体取决于另一个字段

  7. 7

    Laravel Nova 在创建时使用另一个字段的内容填充字段

  8. 8

    当另一个字段值更改时更新一个字段值

  9. 9

    一个字段基于另一个字段的求和

  10. 10

    Python Django使用同一模型中的另一个字段填充模型中的字段

  11. 11

    如何在Rails验证中使用另一个字段

  12. 12

    用于在MySQL的密码末尾附加另一个字段值(此处为id)

  13. 13

    Django-根据另一个字段更新模型字段

  14. 14

    从另一个字段获取Django模型字段

  15. 15

    Django根据另一个字段的值验证字段

  16. 16

    取决于另一个字段的条件字段验证

  17. 17

    如何验证基于另一个字段的字段?

  18. 18

    在DRF的字段级别验证中获取另一个字段的值

  19. 19

    将另一个字段从字段添加到验证器中

  20. 20

    如何验证基于另一个字段的字段?

  21. 21

    Bootstrap x-editable:根据另一个字段的值验证字段

  22. 22

    Rails - 如果另一个字段不为空,则验证字段

  23. 23

    在Oracle中更改另一个字段的值时更改表字段的值

  24. 24

    当使用ORDER BY另一个字段时,如何仅对一个字段使用DISTINCT?

  25. 25

    使用分组依据-尝试将一个字段与另一个字段的MIN匹配时适当的聚合

  26. 26

    字段取决于另一个字段时通知属性更改的最佳方法

  27. 27

    如何仅使用一个字段进行网页身份验证(而不是用户名和密码)

  28. 28

    Angular 8更新文本字段以响应另一个字段更改

  29. 29

    当另一个字段更新时更新字段的模式的标准实践

热门标签

归档