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;
})
});
我有一个使用 <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;
})
});