2

가 나는 URL로 리디렉션, 각도의 $http 서비스를 구성하기 위해 노력하고있어하지만 URL은 서버에서 오는 리디렉션 할 $http (obiously)을 사용하고 있습니다.

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

이 코드 각도에서 순환 종속성 (에러)을 생성한다 :

여기서 코드의 조각이다.

response.status이 403 일 때 동적 URL을 서버에서 가져 와서이 중 하나에 사용자를 리디렉션 할 수있는 방법이 있습니까?

답변

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

또한 거기 $injector를 주입하여 URLs 서비스에서이 순환 종속성을 깰 수 있습니다.

+0

두 경우 모두 작동하지 않습니다! Angular는 동일한 '순환 의존성 발견 : URL <- $ http <- $ compile'을 던졌습니다. –

+0

Gah. 죄송합니다. 주입은 충분히 게으른 것이 아니 었습니다 :'responseError' 함수 내부로 옮기면 이제 작동합니다 : http://plnkr.co/edit/gEI8jq5B3xUt7KOxOAf5?p=preview –

+0

고마워! 그것은 효과가있다! –