我定义了以下服务来处理我的用户资源。服务器返回命名空间的JSON数据,并期望返回命名空间的JSON数据。不幸的是,虽然我已经能够将其配置为读取数据,但它拒绝命名输出数据。我最接近的是writeUserKey
功能,这只会导致服务器抱怨。我认为它覆盖了JSON编码,导致angular只发出[object object]
而不是JSON字符串。我如何让它工作?
代码:
servicesModule.factory('User', ['$resource', '$q', 'API_BASE',
function($resource, $q, apiPath){
var readUsersKey = function(data, headersGetter){
if(data.users) return data.users;
return data;
};
var writeUserKey = function(data, headersGetter){
data = { user: data};
return data;
};
var readUserKey = function(data, headersGetter){
if (data.user) return data.user;
return data;
};
return $resource(apiPath+'users/:id', {id:'@_id'},{
index: { method: 'get', isArray:true, responseType: 'json', transformResponse:readUsersKey},
show: { method: 'get', responseType: 'json', transformResponse:readUserKey},
update: { method: 'put', responseType: 'json', transformResponse:readUserKey,
transformRequest:writeUserKey},
create: { method: 'post', responseType: 'json', transformResponse:readUserKey,
transformRequest:writeUserKey}
});
}]);
原始输出:{ "key":"value","key2":"value2","key2":"value2" }
当前输出:[object object]
所需输出:{ "user": { "key":"value","key2":"value2","key2":"value2" } }
答案 0 :(得分:0)
有时午餐有帮助。抓住一些食物并在其他部分的项目上闲逛之后,我意识到解决方案非常明显。如果我重写了默认的序列化,我只需要重现一个简单的.toJson()调用。
将writeUserKey更改为:
var writeUserKey = function(data, headersGetter){
return angular.toJson({ user: data});
};
看起来这似乎比开箱即用应该要求的东西更复杂,但它确实有效。如果有更好的处理命名空间数据的方法,请告诉我!