2

Я пытаюсь настроить $http службу Угловое, чтобы перенаправить на URL, когда код состояния 403.

Никаких проблем до сих пор, но URL для перенаправления приходит с сервера, через службу, которая использует $http (добросовестно).

Вот кусок кода:

angular 
.module('app') 
.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push(['$q', 'URLs', 
    function($q, Redirect) { 
     return { 
     request: function(config) { 
      return config || $q.when(config); 
     }, 
     responseError: function(response) { 
      if(response.status === 403) { 
      // redirect to URLs.login 
      } 
      return $q.reject(response); 
     } 
     }; 
    } 
    ]); 
}]) 
.factory('URLs', ['$http', function($http) { 
    var URLs; 
    $http.get('/urls').then(function(response) { 
    URLs = response.data; 
    }); 
    return URLs; 
}]); 

Этот код создает круговую зависимость (ошибки) в Угловое.

Есть ли способ, которым я могу это сделать, с динамическими URL-адресами, поступающими с сервера, и на основе этого перенаправить пользователя на один из них, когда response.status - это 403?

ответ

2

Использование $injector service лениво загрузить URLs услуги:

angular 
.module('app') 
.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push(['$q', '$injector', 
    function($q, $injector) { 
     return { 
     request: function(config) { 
      return config || $q.when(config); 
     }, 
     responseError: function(response) { 
      var Redirect = $injector.get('URLs'); 
      if(response.status === 403) { 
      // redirect to URLs.login 
      } 
      return $q.reject(response); 
     } 
     }; 
    } 
    ]); 
}]) 

Вы также можете разорвать эту циклическую зависимость в URLs службы путем введения $injector там.

+0

Это не работает, в обоих случаях! Угловая выбрасывает ту же «Циркулярную зависимость найденную: URLs <- $ http <- $ compile' –

+0

Gah. Извините, инъекция не была ленивой: переместил ее в функцию 'responseError', и теперь она работает: http://plnkr.co/edit/gEI8jq5B3xUt7KOxOAf5?p=preview –

+0

Спасибо! Это сработало! –

 Смежные вопросы

  • Нет связанных вопросов^_^