【问题标题】:Change AngularJS input[date] programmatically以编程方式更改 AngularJS 输入[日期]
【发布时间】: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 中使用它,则它不起作用,适合使用这个方法。

  1. 什么会弄乱我的input[dates],所以我无法设置值 指定的控制器?
  2. 为什么 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


【解决方案1】:

Angular 1.2.x 不支持输入[日期]。

更新到 1.3.13 解决了这个问题。

【讨论】:

    猜你喜欢
    • 2010-10-13
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 2018-08-29
    • 2016-07-15
    相关资源
    最近更新 更多