【发布时间】:2015-02-07 10:09:56
【问题描述】:
我正在尝试为 input[date] 控制控制器中的初始值。
来自 AngularJS input[date] 文档,
模型必须始终是一个 Date 对象,否则 Angular 会抛出 一个错误。
他们提供了一个工作示例,说明如何在控制器中初始化input[date](粘贴simplified version),该示例适用于 Plunker。
<script>
angular.module('dateInputExample', [])
.controller('DateController', ['$scope', function($scope) {
$scope.value = new Date(2013, 9, 22);
}]);
</script>
<form name="myForm" ng-controller="DateController as dateCtrl">
<input type="date" id="exampleInput" name="input" ng-model="value" />
</form>
当我在我的应用程序中执行相同操作时,我总是会收到以下消息:
The specified value 'Sun Nov 09 2014 00:00:00 GMT+0100 (CET)' does not conform to the required format, 'yyyy-MM-dd'
并且控件未初始化。似乎它需要一个 ISO 格式的字符串,而不是一个有效的日期对象。
在Set default value of HTML5 date input field with angularJS 中提出了一种替代方法:
<input type="date" ng-model="date" value="{{date}}">
...
$scope.date = $filter("date")(Date.now(), 'yyyy-MM-dd');
它只是为模型分配一个“yyy-MM-dd”字符串。根据文档,这应该会引发错误,因为字符串不是有效的日期对象,但是第二种方法对我有用,但有趣的是,如果您在修改后的原始 Plunker 中使用它,则它不起作用,适合使用这个方法。
- 什么会弄乱我的
input[dates],所以我无法设置值 指定的控制器? - 为什么 alt 方法对我有用 (和其他人)但无法在提供的简单演示中工作?
以下是我的代码的一些摘录,其中创建了 input[type] 并为其分配了初始值:
index.html
<input type="date" name="input", ng-model="value" />
控制器
.controller("UploadsCtrl",["$scope","$filter", function($scope, $filter) {
// $scope.value = new Date(2013, 22, 9); // Not working
$scope.value = "2015-10-10"; // Working!!!!
...
【问题讨论】:
-
其实很奇怪。 Angular 使用
return toString.call(value) === '[object Date]';来验证 Date 对象,你的情况应该可以工作。你能调试到 Angular 看看为什么它在你的代码库中失败了吗? -
AngularJS 版本:1.2.28
标签: angularjs html5-input-date