2015-10-16 61 views
3

我有一個叫做kcInputComparer的指令,它有一個名爲lessThan的驗證器。我把它放在一個輸入上,將其與第二個輸入進行比較。如果我用驗證器更改輸入的值,驗證器會觸發並計算,但如果我更改第二個輸入,驗證不會發生。我可以在第二個輸入上加上某種$ watch,所以驗證是從兩個角度來看的嗎?下面是我的指令:指令比較兩個輸入以確保一個輸入低於另一個輸入,如何觸發兩個輸入變化的計算?

angular.module('eFile.shared') 
    .directive('kcInputComparer', function() { 
    return { 
     restrict: "A", 
     require: "ngModel", 
     link: function(scope, element, attributes, ngModel) { 
     ngModel.$validators.lessThan = function(modelValue) { 
      if (modelValue && scope.lessThan) { 
      return parseFloat(modelValue) < parseFloat(scope.lessThan); 
      } 
      return true; 
     }; 
     }, 
     scope: { 
     lessThan: '=lessThan' 
     } 
    }; 
}); 

所以,如果我有:

<input id="input1" ng-model="vm.input1" kc-input-comparer less-than="vm.input2"/> 
<input id="input1" ng-model="vm.input2"/> 

我也將在50輸入1和49的輸入2,這將是無效的。如果我將input1設置爲48,它將恢復爲有效。但是,如果我有50個input1和49個input2,並且我將input2更改爲51,則什麼都不會發生。我需要能夠觸發這一點。

+1

是的,你可以把你的指令中的$手錶觸發驗證。 – JoseM

+0

那將是什麼樣子?我可以把$ watch(scope.lessThan?) –

+1

@sheilak剛剛回答你如何做到這一點 – JoseM

回答

1

驗證器只會在模型值更改時自動觸發。

您可以使用ngModel.$validate()一起$watch觸發驗證這樣的:

scope.$watch(function() { 
    return scope.lessThan; 
    }, function() { 
    ngModel.$validate(); 
}); 

JsFiddle

+0

真棒,謝謝!這完全奏效。 –

相關問題