Промежуточное программное обеспечение Angular Resource для отслеживания реакции

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?

Теги:

2 ответа

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
    Это поставило меня на правильный путь, но я все еще хотел использовать $ resource для настройки этого. Я посмотрел и перехватчик является принятым свойством ресурса.
  • 0
    вместо перехватчика в каждом вызове вы должны использовать глобальный перехватчик, как в примере кода выше
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);
                }
            }
        }
    });
}]).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню