Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在ngModel值之前查看它';有效吗?_Javascript_Angularjs_Validation_Angular Ngmodel_Angular Directive - Fatal编程技术网

Javascript 如何在ngModel值之前查看它';有效吗?

Javascript 如何在ngModel值之前查看它';有效吗?,javascript,angularjs,validation,angular-ngmodel,angular-directive,Javascript,Angularjs,Validation,Angular Ngmodel,Angular Directive,我有一个密码字段,旁边有一个passwordStrengthMeter元素指令。我希望passwordStrengthMeter能够观察密码字段的变化并实时更新,而不仅仅是在模糊或密码字段的模型通过验证时 我在密码字段上使用角度验证,我发现在密码字段有效之前,我的指令无法观察密码字段的更改。我希望密码验证保持不变,但我也希望实时强度指示。我怎样才能做到这一点?这是我到目前为止所拥有的 HTML: 以及该指令: angular.module('app.directives').directiv

我有一个密码字段,旁边有一个passwordStrengthMeter元素指令。我希望passwordStrengthMeter能够观察密码字段的变化并实时更新,而不仅仅是在模糊或密码字段的模型通过验证时

我在密码字段上使用角度验证,我发现在密码字段有效之前,我的指令无法观察密码字段的更改。我希望密码验证保持不变,但我也希望实时强度指示。我怎样才能做到这一点?这是我到目前为止所拥有的

HTML:


以及该指令:

angular.module('app.directives').directive('passwordStrengthMeter', function() {
    'use strict';

    return {
        restrict: 'E',
        replace: true,
        template: '<div class="password-strength-meter"></div>',
        link: function(scope, element, attrs) {
            // Map scores to CSS classes.
            var scoreClasses = {
                0: 'blank',
                1: 'weak',
                2: 'moderate',
                3: 'strong',
                4: 'very-strong'
            };

            var scorer = function() {
                // Get password value.
                var password = scope.$eval(attrs.passwordField);

                // Calculate a score.
                // TODO Replace this with an actual calculation.
                return password.length;
            }
            scope.$watch(scorer, function(score) {
                // Remove any score classes for the element.
                for (var i in scoreClasses) {
                    element.removeClass(scoreClasses[i]);
                }

                // Set class based on score.
                element.addClass(scoreClasses[score]);
            });
        }
    };
});
angular.module('app.directives')。directive('passwordStrengthMeter',function(){
"严格使用",;
返回{
限制:'E',
替换:正确,
模板:“”,
链接:函数(范围、元素、属性){
//将分数映射到CSS类。
var scoreClasses={
0:'空白',
1:"弱",,
二:"温和",,
三:"强",,
4:“非常强壮”
};
var scorer=函数(){
//获取密码值。
var password=scope.$eval(attrs.passwordField);
//计算分数。
//TODO将此替换为实际计算。
返回password.length;
}
范围:$watch(记分员、功能(记分){
//删除元素的所有分数类。
for(分数等级中的变量i){
element.removeClass(scoreClasses[i]);
}
//根据分数设置课程。
element.addClass(scoreClasses[score]);
});
}
};
});
似乎设置

ng-model-options="{allowInvalid: true}"
在密码输入字段上,可以解决此问题

如果有其他或更好的解决方案,请随时发布。

,以供将来参考。
ng-model-options="{allowInvalid: true}"