【问题标题】:Angularjs: Expected `2015-11-21T02:00:00.000Z` to be a dateAngularjs:预计“2015-11-21T02:00:00.000Z”是一个日期
【发布时间】:2015-11-10 13:26:16
【问题描述】:

我正在开发一个包含任务和项目的应用程序 MEAN。但是当我编辑任务的截止日期时,我收到了这个错误:

Error: [ngModel:datefmt] Expected `2015-11-21T02:00:00.000Z` to be a date

我已经对此进行了很多研究,但我无法提出任何解决方案来解决我的问题,请帮助我!

我对交货日期的 html 输入是这样的:

<input type="date" data-ng-model="task.deadline" id="deadline" required>

这是我的客户端控制器(角度):

// Find a task by the id
$scope.findOne = function() {
  $scope.task = Tasks.get({
    taskId: $routeParams.taskId
  });
};

这是我的服务器端控制器(节点):

// Find a specific task using the id
exports.taskByID = function(req, res, next, id) {
  Task.findById(id).populate('creator', 'firstName lastName fullName').exec(function(err, task) {
    if (err) return next(err);
    if (!task) return next(new Error('Não foi possível carregar a tarefa ' + id));
    req.task = task;
    task.deadline = new Date(task.deadline);
    next();
  });
};

谁来帮帮我!

【问题讨论】:

  • 尝试捕获日期,将其解析为 new Date()
  • 我是 MEAN 的菜鸟 :( 我必须在服务器端这样做?
  • 获取数据后,分配前你需要将数据转换成你需要的东西,某种你需要的转换器。

标签: angularjs node.js date


【解决方案1】:

假设Tasks 是一个$resource 对象,您需要添加一个transformResponse 拦截器,例如:

var Tasks = $resource('/service/server/method', {}, {
  get: {
    method: 'GET',
    isArray: false,
    transformResponse: function(data, header) {
      var obj = angular.fromJson(data);
      obj.deadline = new Date(data.deadline)
      // you will want to use moment.js to handle your dates on the clientside if you expect any kind of timezone accuracy.
      return obj;
    }
  }

【讨论】:

    猜你喜欢
    • 2015-01-10
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    相关资源
    最近更新 更多