我在$ resource的保存中传递复杂对象时遇到问题。它正在剥离嵌套对象。 Angular 1.2.6。
例如,我定义了一个服务:
services.factory(
'DocumentService',
[
'$resource',
function($resource) {
return $resource(
'/app/rest/document/:id?user=:user',
{
id: "@id",
user: "@user"
},
{}
);
}
]
);
我传入文档服务并获取文档。成功后它将被纳入范围。
DS.get(
{id : documentId, user: $scope.user},
function(data) {
$scope.document = data;
}
);
我添加了一个表示文档已被编辑的对象:
$scope.document.documentEdit = {
user : $scope.user,
editAction : "update"
};
和另一个领域:
$scope.document.testField = "this goes down";
当我拨打以下任何一种电话时:
$scope.document.$save({id : documentId, user: $scope.user});
DS.save({id : documentId, user: $scope.user}, $scope.document);
“testField”被序列化并发布,但“documentEdit”字段没有。有趣的是,如果我做以下事情:
DS.save({id : documentId, user: $scope.user}, angular.toJson($scope.document));
有效;这两个字段都被发送了。
我错过了什么?
我通过angular-resource.js中的角度代码。有一部分代码:
var serverRequest = function(config) {
headers = config.headers;
var reqData = transformData(config.data, headersGetter(headers), config.transformRequest);
// strip content-type if data is undefined
if (isUndefined(config.data)) {
forEach(headers, function(value, header) {
if (lowercase(header) === 'content-type') {
delete headers[header];
}
});
}
if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) {
config.withCredentials = defaults.withCredentials;
}
// send request
return sendReq(config, reqData, headers).then(transformResponse, transformResponse);
};
var chain = [serverRequest, undefined];
var promise = $q.when(config);
当它命中serverRequest时,documentEdit已被过滤掉。