AngularJS 在发送到服务器之前将 Date 转换为 getTime()

AngularJS convert Date to getTime() before sending to server

我有一个使用 <input type="datetime-local" ng-bind="course.endDate".. 并设置模型变量的表单。 在将日期发送到服务器之前,我必须将日期 2015-04-04T22:00:00.000Z 转换为 getTime().

给出的 integer

我在控制器中添加了这个:course.endDate = course.endDate.getTime(); 它适用于服务器端,但 angular 在控制台中用 this error 抱怨。 (如上所述,它有效,但我想避免错误

Error: [ngModel:datefmt] Expected `1325458800000` to be a date
http://errors.angularjs.org/1.3.15/ngModel/datefmt?p0=1325458800000
    at REGEX_STRING_REGEXP (angular.js:63)
    at Array.<anonymous> (angular.js:19938)
    at Object.ngModelWatch (angular.js:23419)
    at Scope.$get.Scope.$digest (angular.js:14300)
    at Scope.$get.Scope.$apply (angular.js:14571)
    at done (angular.js:9698)
    at completeRequest (angular.js:9888)
    at XMLHttpRequest.requestLoaded (angular.js:9829)

那我该怎么办?

我想添加一些在表单中使用的字段(formEndDate)并为服务器端转换为另一个(endDate = formEndDate.getTime()),但这样服务器拒绝由于参数 formEndDate 不允许调用,如果我删除 formEndDate 那么一切都会中断。

附加问题: 当我从服务器获取数据时,我有一个整数需要转换为要在表单中使用的日期。所以我还必须在允许编辑之前转换日期。我怎样才能做到这一点? (获取的数据放入一个数组中,因此无需遍历整个数组即可进行转换会很棒)

解决方案

感谢这两个答案(我设置正确的第一个)我也(以某种方式)解决了编辑时表格的问题。我这样做是通过创建一个额外的字段并在编辑时将其用于表单(我进行内联编辑)。

我创建了一个要点 here

在将数据发送到服务器之前,复制并设置endDate。然后将副本发送到服务器:

var courseCopy = angular.copy(course);
courseCopy.endDate = courseCopy.endDate.getTime();

在 angular 中,最好将所有表单数据保存在一个 属性 下,例如:

$scope.formData = {endDate : 'xxx', ...};

在将数据发送到服务器之前,您需要创建 formData:

的副本
  var formDataCopy= angular.copy($scope.formData);

然后您可以对给定的副本进行任何转换操作。任何更改都不会影响范围内的数据。

您可以使用 transformRequest 来转换请求的主体,就像这样(取自 official docs:

function appendTransform(defaults, transform) {
  // We can't guarantee that the default transformation is an array
  defaults = angular.isArray(defaults) ? defaults : [defaults];

  // Append the new transformation to the defaults
  return defaults.concat(transform);
}

$http({
  url: '...',
  method: 'GET',
  transformRequest: appendTransform($http.defaults.transformRequest, function(value) {
    // transform the payload here
    return value;
  }),
  transformResponse: appendTransform($http.defaults.transformResponse, function(value) {
    // transform the response here
    return value;
  })
});