我是Angular的新手,正在研究拦截器。我创建了一个角度工厂来从API中获取一些数据:
app.factory('Connection',['$resource',function($resource) {
return $resource('url',{param1: '1',param2: '55'},);
}]);
我还创建了类似的拦截器:
app.factory('connectionInterceptor', function($q,$location) {
var connectionInterceptor = {
response: // code here
responseError: // code here
};
return connectionInterceptor;
});
拦截器效果很好。但它拦截了我所做的每一个http请求,并且我想让它适用于特定的$资源。我在angular $ resource doc中读到,有一种方法可以通过向$ resource添加一个拦截器动作/参数来实现它。所以我试过了:
app.factory('Connection',['$resource',function($resource) {
return $resource('http://localhost:8080/api/login',{user: '1',password: '55'}, {},
query: {
method : 'GET',
interceptor : 'connectionInterceptor'
}
});
}]);
哪个不起作用。抛出的错误是:Error in resource configuration for action query. Expected response to contain an object but got an array
。
我错过了什么?
答案 0 :(得分:1)
正如你所说,拦截器是全球性的。我必须在我的响应中添加一个测试来检查$ resource URL并添加一些特定的处理。
module.factory('interceptor', function() {
var interceptor = {
response: function(response) {
if (response.config.url.startsWith('my url')) {
// some treatment
}
else
// other treatment
return response;
}
return connectionInterceptor;
});