我有一個自定義驗證指令,當一個字段被更改時正在被正確調用。但是,該字段是否有效也是基於另一個字段的值。如果重要的話,這第二個字段是一個選擇列表。當另一個字段被更改時觸發字段驗證
我想知道是否有某種方式可以手動觸發驗證當第二個窗體被更改。也許通過使用ng-change
事件。處理這樣的事情的正確方法是什麼?
這裏是我的指令:
angular.module('myApp', []).
directive('validage', function() {
return {
require: 'ngModel',
link: function (scope, elem, attr, ngModel) {
function validate(value) {
var valid = true;
if ((GetDateDifference(new Date(value), new Date()) < 16 || GetDateDifference(new Date(value), new Date()) > 129)
&& scope.dep.DependantType == "Spouse") {
valid = false;
}
ngModel.$setValidity('validage', valid);
return value;
}
//For DOM -> model validation
ngModel.$parsers.unshift(function (value) {
var valid = true;
if ((GetDateDifference(new Date(value), new Date()) < 16 || GetDateDifference(new Date(value), new Date()) > 129)
&& scope.dep.DependantType == "Spouse") {
valid = false;
}
ngModel.$setValidity('validage', valid);
return value;
});
//For model -> DOM validation
ngModel.$formatters.unshift(function (value) {
var valid = true;
if ((GetDateDifference(new Date(value), new Date()) < 16 || GetDateDifference(new Date(value), new Date()) > 129)
&& scope.dep.DependantType == "Spouse") {
valid = false;
}
ngModel.$setValidity('validage', valid);
return value;
});
}
};
});
如果你是新來AngularJS,我肯定會推薦閱讀這些文章2:part 1 & part 2。它們是AngularJS表單的概述。
請參閱StackOverflow上的[this answer](http://stackoverflow.com/a/16886177/2057033)。 – Blackhole
與角1.3這工作在指令:ngModel。$ validate(); –
在anglular 1.2中,您可以使用ngModel $ setViewValue()手動觸發$ parser中的所有函數。因此,只需將其設置爲:ngModel。$ setViewValue(ngModel。$ viewValue) – likesalmon