Javascript $resource transformResponse不工作
这里有一个简化的Javascript $resource transformResponse不工作,javascript,angularjs,Javascript,Angularjs,这里有一个简化的$resource示例(改编自Angular site): angular.module('project',['mongonab']); 函数ListCtrl($scope,Project){ $scope.projects=Project.test(); } 角度.module('mongolab',['ngResource'])。 工厂(‘项目’、功能($resource){ var url、dfParams、actions; url='1〕https://api.mong
$resource
示例(改编自Angular site):
angular.module('project',['mongonab']);
函数ListCtrl($scope,Project){
$scope.projects=Project.test();
}
角度.module('mongolab',['ngResource'])。
工厂(‘项目’、功能($resource){
var url、dfParams、actions;
url='1〕https://api.mongolab.com/api/1/databases“+”/angularjs/collections/projects/:id”;
dfParams={
apiKey:'4f847ad3e4b08a2eed5f3b54'
};
行动={
测试:{
方法:“GET”,
伊萨雷:没错,
transformResponse:功能(响应){
//永远不会有人打电话
console.log('transforming');
返回响应;
}
};
var Project=$resource(url、dfParams、actions);
返回项目;
});
问题是,console.log('transforming')
这一行永远不会被调用。为什么呢?其他一切都正常
Live fiddle。响应转换回调未在$resource服务中公开。它位于底层$http服务中 所以你有两个选择:
- 使用“低级”$http而不是$resource abstraction
- 在您的资源周围创建某种包装器,以您想要的方式转换响应
我定义了一个拦截器,它包含$http级别的
transformResponse
,如:
return {
'request': function (config) {
config.defaults.transformResponse = function(data){
//some has been done
};
return config;
},
当我删除上面的代码时,我在$resource中的transformResponse
工作了!为了解决这个问题,我在$resource中定义了我的
transformResponse
,如下所示:
return $resource(pathConfig.serverURL + ':demoId',
{
demoId: "@id"
},
{
hello: {
method: "GET",
url: serverDomain + ":demoId",
transformResponse: addTransformResponses(
[
function (data, getHeaders) {
//doing hello's OWN interceptors
}
])
}
});
而addTransformResponses
包含常见拦截器类似:
addTransformResponses: function (addTrans) {
return [this.parseResponseJson, this.parseResponseArray]
.concat(addTrans);
},
//parse JSON
parseResponseJson: function (data, getHeaders) {
try {
return angular.fromJson(data);
} catch (e) {
console && console.error("return data is not a JSON!");
return data;
}
},
parseResponseArray: function (data, getHeaders) {
if (angular.isArray(data)) {
return {"array": data};
}
return data;
}
通过这样做,您可以很好地配置常见的拦截器和某些请求自己的拦截器!:)如果有更好的练习,请告诉我!谢谢!我也这么认为(未在
$resource
中公开)但是我看了$resource
的代码,它被记录在了中。另外,通过阅读代码,你可以看到它扩展了httpConfig
和。这似乎是有意的,因为他们是为了它。你在看不稳定的主分支,它还没有发布。是的,我是通过@rgaskill answer得到的。谢谢。你到底在哪里添加addTransformResponses
、parseResponseJson
和parseResponseArray
函数?