Validation 检测ng模型更改为指令
我正在做一个自定义验证(指令),比较两个日期,如果开始日期大于结束日期,则显示错误。。。 我正在通过ng模型传递开始日期Validation 检测ng模型更改为指令,validation,angularjs,angularjs-directive,Validation,Angularjs,Angularjs Directive,我正在做一个自定义验证(指令),比较两个日期,如果开始日期大于结束日期,则显示错误。。。 我正在通过ng模型传递开始日期 ng-model="start_date" 并以我的指令结束日期: lower-than-date="{{end_date.toISOString()}}" //ignore the toISOString() 我正在使用指令的输入 <input type="text" ng-model="start_date" datepicker-popup="yyyy-MM-
ng-model="start_date"
并以我的指令结束日期:
lower-than-date="{{end_date.toISOString()}}" //ignore the toISOString()
我正在使用指令的输入
<input type="text" ng-model="start_date"
datepicker-popup="yyyy-MM-dd" min="today" show-weeks="false"
lower-than-date="{{end_date.toISOString()}}"/>
.directive("lowerThanDate", ['$parse', function($parse) {
return {
require: 'ngModel',
link: function (scope, element, attrs, ctrl) {
var lowerThan = null;
function revalidate(_val) {
var valid = _val && lowerThan ? _val < lowerThan : true;
ctrl.$setValidity('lowerThanDate', valid);
}
attrs.$observe('lowerThanDate', function(_value) {
//Here I'm detecting when end_date change
lowerThan = new Date(_value);
revalidate(ctrl.$modelValue);
});
ctrl.$parsers.unshift(function(_value) {
revalidate(_value);
return _value;
});
}
};
}])
指令
<input type="text" ng-model="start_date"
datepicker-popup="yyyy-MM-dd" min="today" show-weeks="false"
lower-than-date="{{end_date.toISOString()}}"/>
.directive("lowerThanDate", ['$parse', function($parse) {
return {
require: 'ngModel',
link: function (scope, element, attrs, ctrl) {
var lowerThan = null;
function revalidate(_val) {
var valid = _val && lowerThan ? _val < lowerThan : true;
ctrl.$setValidity('lowerThanDate', valid);
}
attrs.$observe('lowerThanDate', function(_value) {
//Here I'm detecting when end_date change
lowerThan = new Date(_value);
revalidate(ctrl.$modelValue);
});
ctrl.$parsers.unshift(function(_value) {
revalidate(_value);
return _value;
});
}
};
}])
.directive(“lowerstandarte”、['$parse',function($parse){
返回{
要求:'ngModel',
链接:函数(范围、元素、属性、ctrl){
var lowerThan=null;
函数重新验证日期(_val){
var valid=\u val&&lowerThan?\u val
此代码工作正常,但只有在更改结束日期时才会触发验证。我还想验证何时更改开始日期
因此,问题是:当开始日期更改时,如何“观察”ng模型值以触发验证
注:
这是比较日期的通用指令。记住这一点。在链接函数中设置绑定到
ngModel
:
var modelValue = $parse(attr.ngModel);
scope.$watch(modelValue, function(value) {
// validate value against endDate.
});
在链接功能中设置绑定到
ngModel
:
var modelValue = $parse(attr.ngModel);
scope.$watch(modelValue, function(value) {
// validate value against endDate.
});
您应该创建一个格式化程序:“当模型值更改时,作为管道执行的函数数组”
所以,只要做一些类似的事情:
function revalidate(_val) {
var valid = _val && lowerThan ? _val < lowerThan : true;
ctrl.$setValidity('lowerThanDate', valid);
return _val;
}
....
ctrl.$formatters.unshift(revalidate);
ctrl.$parsers.unshift(revalidate);
功能重新验证(\u val){
var valid=\u val&&lowerThan?\u val
原因可能是模型是从其他地方更改的,而不是直接在DOM元素中更改的。您应该创建一个格式化程序:“当模型值更改时,作为管道执行的函数数组”
所以,只要做一些类似的事情:
function revalidate(_val) {
var valid = _val && lowerThan ? _val < lowerThan : true;
ctrl.$setValidity('lowerThanDate', valid);
return _val;
}
....
ctrl.$formatters.unshift(revalidate);
ctrl.$parsers.unshift(revalidate);
功能重新验证(\u val){
var valid=\u val&&lowerThan?\u val
原因可能是模型是从其他地方更改的,而不是直接在DOM元素中更改的。我认为您应该能够$观察ctrl属性或ctrl的子属性之一来查找模型。我认为您应该能够$观察ctrl属性或ctrl的子属性之一来查找模型。