2014-05-06 254 views
2

我已经创建了验证指令,它确保相同的数据输入密码并验证密码字段,其工作正常如果我在其中键入内容,如果我输入密码然后删除它,它不起作用。 检查这里的plunker http://plnkr.co/edit/tsNqEpMtLY1aEkxBjNcw?p=preview如何应用验证密码和验证密码

Type something in password field -> Update btn will disabled 
Clear the password field by pressing backspace -> Update btn still disabled 

这里是js代码

.directive('equalsTo', function() { 
     return { 
      require: 'ngModel', 
      link: function(scope, elm, attrs, ctrl) { 
       var sc = scope; 
       scope.$watch(attrs.ngModel, function() { 
        var eqCtrl = scope.$eval(attrs.equalsTo); 
        if (ctrl.$viewValue===eqCtrl.$viewValue) { 
         ctrl.$setValidity('equalsTo', true); 
         eqCtrl.$setValidity('equalsTo', true); 
        } else { 
         ctrl.$setValidity('equalsTo', false); 
         eqCtrl.$setValidity('equalsTo', false); 
        } 
       }); 
      } 
     }; 
    }); 
+0

同正在为我工​​作 – Animesh

+0

在密码字段中输入abc,而不进行任何操作,只需按退格键即可删除所有这些字符ype使密码字段为空。你会看到它仍然会显示错误 – coure2011

+0

我没有看到任何错误的行为。作品可预测 –

回答

3

删除密码后你比较空字符串值未定义:

ctrl.$viewValue===eqCtrl.$viewValue 

你应该检查,如果两个变量都是空的或不确定的,然后形式是有效的:

if (ctrl.$viewValue===eqCtrl.$viewValue || (!!!ctrl.$viewValue && !!!eqCtrl.$viewValue)) { 
    ctrl.$setValidity('equalsTo', true); 
    eqCtrl.$setValidity('equalsTo', true); 
} else { 
    ctrl.$setValidity('equalsTo', false); 
    eqCtrl.$setValidity('equalsTo', false); 
} 

http://plnkr.co/edit/QKOr2K7NXjOMGtnKdeWT?p=preview

0
.directive('equals', 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('equals', function (val) { 
        validate(); 
       }); 

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

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

试试这个指令。