【问题标题】:Strange error with date input in angular角度日期输入的奇怪错误
【发布时间】:2015-07-02 08:11:33
【问题描述】:

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

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代码:

angular.module('angularApp',[])

.controller('MyCtrl', function($scope, $filter) {
    $scope.maxDateStr = $filter('date')(new Date(), 'yyyy-MM-dd');
    $scope.date = new Date();

});

我在codepen上的代码

after debug in chrome, i found that when choose the max date, the value pass to NgModelController.$parsers had time e.g. 2015 年 7 月 2 日星期四 16:54:00 GMT+0800 (CST)。当运行 max 验证器时,它返回 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。

【问题讨论】:

  • 您的 codepen 没有打开。并且,试着简单地把有问题的代码本身。
  • 编辑您的链接 -> 删除开始时的空格并在 http 之后添加:
  • 看到你的代码...它对我来说工作正常...确切的问题是什么?
  • 对此我感到非常抱歉。链接已更改,现在可以打开
  • @RohitKumar 但是当我选择最大日期时,模型值未定义

标签: angularjs


【解决方案1】:

用以下代码替换您的代码

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 时间创建日期,因此它应该与最大验证完美配合。

【讨论】:

    猜你喜欢
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多