我有一个自定义验证指令,当一个字段被更改时正在被正确调用。但是,该字段是否有效也是基于另一个字段的值。如果重要的话,这第二个字段是一个选择列表。当另一个字段被更改时触发字段验证
我想知道是否有某种方式可以手动触发验证当第二个窗体被更改。也许通过使用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