日期输入有角度的奇怪错误

时间:2015-07-02 08:11:34

标签: angularjs

我正在尝试将今天设置为日期输入的最大日期。 但是每当我今天在日期选择器中选择时,模型值总是未定义的。有人遇到过这样的问题吗?

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();

});

codepen

上的代码

在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。

1 个答案:

答案 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时间创建日期,因此它应该完美地使用最大验证。