我有一个角度服务,看起来像:
service('PortfolioService', ['$resource', function($resource) {
return $resource('/api/', {}, {
stock_positions: {
method: 'GET',
url: '/api/stock_positions',
isArray: false
}
});
}]).
在控制器中:
PortfolioService.stock_positions(function someCB(result){
//do something with the result
});
如果您未登录,则api会返回一个如下所示的对象:
{
error: "Login required",
redirect: "/login"
}
我想在资源中捕获它,处理它(重定向到/ login),而不是传递给控制器中的someCB。
有没有办法用$ resource做到这一点?
答案 0 :(得分:3)
我认为这可以通过角度拦截器来实现。
https://docs.angularjs.org/api/ng/service/$http
$httpProvider.interceptors.push(['$location', function($location) {
return {
'response': function(response) {
if(response.redirect.indexOf('/login'){
// redirect to login
}
return response;
}
};
}]);
答案 1 :(得分:0)
看起来我只需要执行以下操作:
service('PortfolioService', ['$resource', function($resource) {
return $resource('/api/', {}, {
stock_positions: {
method: 'GET',
url: '/api/stock_positions',
isArray: false,
interceptor:{
response:function(response){
//do stuff here to catch the response before passing it on.
return response;
},
responseError: function(rejection){
console.log(rejection);
}
}
}
});
}]).