以下是我的代码
MY_MODULE.factory("SOME_API", ['$resource', '$http', '$rootScope', function($resource, $http, $rootScope){
return $resource("/appi/get/", {responseFormat: 'json', responselanguage:'English', pageno:1}, {
search:{
method:'GET',
transformResponse: [function (data, headersGetter) {
console.log(data);
// you can examine the raw response in here
$log.info(data);
$log.info(headersGetter());
return {tada:"Check your console"};
}].concat($http.defaults.transformResponse),
params:{
param1:'SOME_DATA',
param2:'SOME_DATA2',
}
}
}
}
我使用角度1.0.7,无法弄清楚为什么我的transformResponse没有被调用。我相信这个版本的angular支持transformResponse,如果不是如何实现类似的回调。
答案 0 :(得分:1)
transformResponse
不是$resource
的参数。响应拦截器在$httpProvider
上配置。请参阅$http
documentation(Response Interceptor
部分)。
请记住,一旦配置了这些拦截器,就会针对$http
发出的每个请求进行运行。
答案 1 :(得分:0)
是否可以使用AngularJS 1.2?
我对1.0.8有完全相同的问题。在我更改为angular-1.2.0-rc.2之后,我的资源的transformResponse
回调开始被调用。
答案 2 :(得分:0)
下面是解决方案,基本上是$ http的包装器,它模拟默认资源
$rootScope.woiresource = function (url, defaults, actions) {
var $res = {};
for (var i in actions) {
var default_params = {};
for (var di in defaults) {
default_params[di] = defaults[di];
}
for (var ai in actions[i].params) {
default_params[ai] = actions[i].params[ai];
}
$res[i] = (function (url, method, default_params) {
return function (params, callback, headers) {
if (typeof params == 'function') {
callback = params;
params = {};
}
if (typeof headers == 'undefined') {
headers = {};
}
for (var pi in params) {
default_params[pi] = params[pi];
}
return $http({
url: url,
method: method,
transformResponse: [function (strData, headersGetter) {
//Do Something
}].concat($http.defaults.transformResponse),
params: default_params,
headers: headers,
}).success(function (data) {
callback(data);
});
};
})(url, actions[i].method, default_params);
}
return $res;
};
参数类似于默认资源只是改变了工作,希望这有助于一些人。