我正在尝试将今天设置为日期输入的最大日期。 但是每当我今天在日期选择器中选择时,模型值总是未定义的。有人遇到过这样的问题吗?
html代码:
<form name="myForm" class="item">
<input type="date" ng-model="date" max="{{maxDateStr}}" name="dateInput">
<p> date: {{date | date:'yyyy-MM-dd'}}</p>
<p>myForm.$valid : {{myForm.$valid}}</p>
<p>myForm.dateInput.$error.max : {{myForm.dateInput.$error.max}}</p>
</form>
js code:
angular.module('angularApp',[])
.controller('MyCtrl', function($scope, $filter) {
$scope.maxDateStr = $filter('date')(new Date(), 'yyyy-MM-dd');
$scope.date = new Date();
});
上的代码
在chrome中调试之后,我发现当选择最大日期时,该值传递给NgModelController。$解析器有时间,例如星期四2015年7月2日16:54:00 GMT + 0800(CST)。运行max validator时,它返回false,
角度最大验证码:
var maxVal;
ctrl.$validators.max = function(value) {
return !isValidDate(value) || isUndefined(maxVal) || parseDate(value) <= maxVal;
};
因为maxVal
值为Thu Jul 02 2015 00:00:00
,所以它返回false。
答案 0 :(得分:2)
使用以下
替换您的代码angular.module('angularApp',[])
.controller('MyCtrl', function($scope, $filter) {
$scope.maxDateStr = $filter('date')(new Date(), 'yyyy-MM-dd');
$scope.date = new Date();
});
与
angular.module('angularApp',[])
.controller('MyCtrl', function($scope, $filter) {
$scope.maxDateStr = $filter('date')(new Date(), 'yyyy-MM-dd');
$scope.date = new Date((new Date()).getFullYear(), (new Date()).getMonth(), (new Date()).getDate());
});
注意:它会以00:00:00
时间创建日期,因此它应该完美地使用最大验证。