javascript - AngularJS - 无法在 View 中显示日期对象

标签 javascript angularjs html date

我试图在我的 View 中显示一个日期对象。

我遵循了这些文档:https://docs.angularjs.org/api/ng/input/input%5Bdate%5D

但没有成功。

我确实有相同的代码:(编辑:删除了 controllerAs 语法并添加了 $scope)

<input type="date" name="birthDate" ng-model="example.value"
   placeholder="yyyy-MM-dd" min="2013-01-01" max="2013-12-31" required /> 

和我的对象:

$scope.example = {
     value: new Date(2013, 9, 22)
};

但是还是报错

Error: [ngModel:datefmt] Expected 2013-10-22 to be a date

有谁知道是什么导致了这个问题?我尝试在线查看,但我找到的所有答案都说日期对象无效,我很确定我的不是。 (或者是??)

编辑:

由于很多人无法理解我的问题所在,让我用一个 jsfiddle 来说明:http://jsfiddle.net/j2kof5at/

在输出中我看到“dd-mm-2013”​​而不是“22-10-2014”。这是为什么?

编辑 2:(解决方案)

我尝试的解决方案之一是将 angular-input-date 模块添加到我的项目中。我刚刚从我的项目中删除了它,似乎问题已解决。阅读我发现的这个模块的文档:

The latest stable version of AngularJS (~1.2.26) has no support for input[type="date"]. The support was added only for 1.3 branch of Angular, which is now in beta.

因为我使用的是 angular 1.5.x,所以已经有了对此的原生支持,而这个模块实际上是导致问题的原因。这也解释了为什么我的 jsfddle 不工作,因为它使用的是 angular 1.0.1

最佳答案

angModule.directive('moDateInput', function ($window) {
    return {
        require:'^ngModel',
        restrict:'A',
        link:function (scope, elm, attrs, ctrl) {
            var moment = $window.moment;
            var dateFormat = attrs.moDateInput;
            attrs.$observe('moDateInput', function (newValue) {
                if (dateFormat == newValue || !ctrl.$modelValue) return;
                dateFormat = newValue;
                ctrl.$modelValue = new Date(ctrl.$setViewValue);
            });

            ctrl.$formatters.unshift(function (modelValue) {
                if (!dateFormat || !modelValue) return "";
                var retVal = moment(modelValue).format(dateFormat);
                return retVal;
            });

            ctrl.$parsers.unshift(function (viewValue) {
                var date = moment(viewValue, dateFormat);
                return (date && date.isValid() && date.year() > 1950 ) ? date.toDate() : "";
            });
        }
    };
});

关于javascript - AngularJS - 无法在 View 中显示日期对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40586266/

相关文章:

javascript - div 属性宽度不是最大/折叠展开

javascript - 未捕获的类型错误 : Cannot read property 'setRowData' of undefined

javascript - MathJax 不使用 Angular 渲染

c# - 如何在无人干预的情况下自动连续轮询FTP服务器

html - 如何将一个简单的div直接覆盖在一个简单的html表格td之上?

javascript - 关于 Accordion 问题的 jQuery toggleClass

javascript - 使用 Jquery 在长时间流程执行之前和之后更改元素的 css

javascript - 将一个 div 元素包含在另一个 div 元素中会破坏视差效果

javascript - 停止 onclick 的后续方法调用

validation - 仅验证 AngularJS 中的可见控件