2015-07-02 2 views
0

У меня есть угловой сервис, который выглядит как:Угловые промежуточный ресурс, чтобы поймать ответ

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?

ответ

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; 
     } 
     }; 
    }]); 
+0

что поставил меня на правильный путь, но я все еще хотел придерживаться $ ресурса для настройки этой , Я смотрел, и перехватчик является признанным свойством ресурса. – RobKohr

+0

вместо перехватчика в каждом вызове вы должны использовать глобальный перехватчик, например, выше пример кода – Parmod

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); 
       } 
      } 
     } 
    }); 
}]). 
Смежные вопросы