У меня есть угловое обслуживание, которое выглядит так:
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?
Я думаю, что это может быть достигнуто угловым перехватчиком.
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;
}
};
}]);
Похоже, мне просто нужно было сделать следующее:
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);
}
}
}
});
}]).