【问题标题】:Expected to be a date angular.js预计是一个日期 angular.js
【发布时间】:2015-09-02 01:20:37
【问题描述】:

我从 mongodb 中提取这个 JSON,并且我有一个类型为 DATE 的日期字段。

如果需要,我希望能够在界面中更改日期,为此我需要一个带有属性 ng-model="event.date" 的输入类型日期字段,就像这样:

<input class="tables__sidebar-input" type="date" ng-model='event.date'>

这是抛出一个错误:

Error: [ngModel:datefmt] Expected `2015-09-03T00:00:00.000Z` to be a date

我找到了错误的原因并修复了它。我发现这个指令应该修复错误:

angular.module('adminApp')
  .directive("myModelFilter", ["$filter", function($filter) {
    return {
      restrict: 'A', // only activate on element attribute
      require: '?ngModel',
      link: function(scope, element, attrs, ngModelController) {
        ngModelController.$parsers.push(function(data) {
          console.log(data);
          //convert data from view format to model format

          // Grab the parameters
          var params = scope.$eval(attrs.myModelFilter);

          // Filter with the parameters passed
          return $filter(params.filter)(data, params.expr, params.comp);

        });

        ngModelController.$formatters.push(function(data) {
          //convert data from model format to view format
          // Grab the parameters
          var params = scope.$eval(attrs.myModelFilter);

          // Filter with the parameters passed
          return $filter(params.filter)(data, params.expr, params.comp);
        });
      }
    };
  }])

要使用,只需在输入字段中添加my-model-filter="{filter:'date', expr:'yyyy-MM-dd'}",我就是这样做的:

<input class="tables__sidebar-input" type="date" ng-model='event.date' my-model-filter="{filter:'date', expr:'yyyy-MM-dd'}">

但现在使用有效格式抛出相同的错误:

Error: [ngModel:datefmt] Expected `2015-09-02` to be a date

这里缺少什么?

我正在通过控制器从模型服务中提取数据:

检索动作:

retrieve: function() {
    var that = this;

    this.EventModel.Model.find()
        .then(function(result) {
            that.$scope.events = result;
        });
}

请大家帮帮我!我已经阅读了每个 stackoverflow 答案,每个帖子博客,但我不知道如何解决它。

我不想在类型文本中使用掩码,我想使用 type="date" 这是正确的格式。

【问题讨论】:

  • 你看过这篇文章吗? stackoverflow.com/questions/26486696/… 看来您不需要新指令,只需使用简单的 $filter 表达式即可。
  • 由于我使用的结构我不能在控制器中使用,我需要一个过滤器来解决问题..
  • 你能帮帮我吗?我可以给 100 分。

标签: javascript angularjs mongodb date


【解决方案1】:

这是我使用的。我删除了所有现有的 $formatters、$parsers 和 .splice,因为我不需要这些,但你可能想保留它们。

如何使用on指令就像type="date" as-date

angular.module('someApp')
    .directive('asDate', function () {
    return {
        require: '^ngModel',
        restrict: 'A',
        link: function (scope, element, attrs, ctrl) {
            ctrl.$formatters.splice(0, ctrl.$formatters.length);
            ctrl.$parsers.splice(0, ctrl.$parsers.length);
            ctrl.$formatters.push(function (modelValue) {
                if (!modelValue) {
                    return;
                }
                return new Date(modelValue);
            });
            ctrl.$parsers.push(function (modelValue) {
                return modelValue;
            });
        }
    };
});

【讨论】:

  • 我要试试,等一下。
  • 你,你知道为什么会出现这个错误 -> 指定的值 'Wed Sep 02 2015 21:00:00 GMT-0300 (BRT)' 不符合要求的格式,'yyyy-MM -dd'。 ?
  • 1.是浏览器警告还是角度错误? 2. 可以在 $formatters 中尝试 new Date(modelValue);new Date(modelValue).toISOString().slice(0,10); 或在 $parsers 中尝试 return modelValuereturn new Date(modelValue).toISOString().slice(0,10);
  • @amanda,没关系。没必要。当我升级到 angular 1.4 时,我也感到沮丧。我认为自 angular 1.3 以来行为发生了变化,这对 angular 1.2 没有问题。 JSON 没有原生 Date 格式,Angular 想要原生 Date 格式,HTML5 日期字段想要它为 yyyy-MM-dd
  • 我认为角度有一些严重的问题,有些东西应该自然起作用,这只是一个..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-15
相关资源
最近更新 更多