繁体   English   中英

在angularjs中验证密码指令

[英]validate password directive in angularjs

谁能解释一下这段代码的工作原理。

HTML标记

<input type="password" ng-model="password" class="form-control" placeholder="Password" required>
<input type="password" ng-model="confirm_password" class="form-control" placeholder="Password" required validate-equals="password">

指令代码

angular.module('app')
  .directive('validate', function () {
    return {
      require: "ngModel",   
      link: function postLink(scope, element, attrs, ngModelCtrl) {
        function validate(value){
            var valid = (value === scope.$eval(attrs.validate));
            ngModelCtrl.$setValidtity('equal', valid);
            return valid ? value : undefined;
        }

        ngModelCtrl.$parsers.push(validate);
        ngModelCtrl.$formatters.push(validate);

        $scope.$watch(attrs.validate, function(){
            ngModelCtrl.$setViewValue(ngModelCtrl.$viewvalue);
        })
      }
    };
  });

谁能向我解释以下questions

下面的代码在directive做什么?

$scope.watch(attrs.validate, function(){
    ngModelCtrl.$setViewValue(ngModelCtrl.$viewvalue);
});

value如何传递给validate()函数?

查看ngModelController的文档。 由于此指令需要ngModel,因此它将ngModelController接收为链接函数的第四个参数。 关于您的其他问题:

  1. $scope.watch (实际上应该是$scope.$watch )调用在操作指令的元素的validate属性上建立了一个监视 如果validate属性由于某种原因而发生更改(例如,绑定到其值更改的AngularJS表达式),则将执行作为第二个参数传递的函数。 此函数将重置视图值,从而重新触发注册为解析器的验证函数。
  2. 根据ngModelController文档,视图值将传递到第一个解析器函数,该函数的结果将传递到下一个解析器,依此类推。 同样,模型值将传递到第一个格式化程序函数,结果将传递到下一个格式化程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM