如何根据自身在Angular中配置$ http服务?

时间:2014-02-20 13:34:04

标签: angularjs angular-services angular-http angular-http-interceptors

我正在尝试配置Angular的$http服务,以便在状态代码为403时重定向到URL。

到目前为止没有任何问题,但重定向到的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;
}]);

此代码在Angular中创建循环依赖项(错误)。

有没有办法可以做到这一点,拥有来自服务器的动态网址,并在response.status为403时将用户重定向到其中一个?

1 个答案:

答案 0 :(得分: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来解除{{1}}服务中的循环依赖关系。