2014-05-06 240 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); 
       }; 
      } 
     } 
    }) 

試試這個指令。