如果验证工作正常,您实际上只需要设置 minTime 或 maxTime,因为一旦您的“开始”时间在“结束”时间之后,“结束”时间也在“开始”时间之前。
我想做的正是你所描述的,并最终编写了一个指令来做到这一点。
我选择“minTime”作为“结束”时间选择器的属性,并将其设置为“开始”时间选择器的模型。然后,该指令会监视两个模型的更改,如果“开始”时间发生变化,则更新 minTime,并根据“开始”是否在“结束”之前设置模型验证。
只要设置了 ng-model,您也可以在 input[time] 元素上使用它。
我一开始尝试通过使用解析器和格式化程序来避免 $watch,但最终没有将模型注册为无效,直到下次我更改它。
这是指令。随意地你想要吗 http://www.wtfpl.net/用它:
directive('minTime', function (){
return {
require: 'ngModel',
restrict: 'A',
link: function(scope, elem, attrs, ctrl) {
var minTime;
scope.$watch(attrs.minTime, function(newVal) {
minTime = newVal;
validate();
});
scope.$watch(attrs.ngModel, validate);
function validate(value) {
ctrl.$setValidity('minTime', (minTime < ctrl.$modelValue));
return value;
}
}
};
})