我正在尝试配置 Angular 的 $http
服务,以在状态代码为 403 时重定向到 URL。
到目前为止没有问题,但要重定向到的 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;
}]);
此代码在 Angular 中创建循环依赖关系(错误)。
有没有一种方法可以做到这一点,拥有来自服务器的动态 URL,并基于此在 response.status
为 403 时将用户重定向到其中一个?
最佳答案
使用$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
服务中注入(inject) $injector
来打破这种循环依赖关系。
关于angularjs - 如何在 Angular 中根据自身配置 $http 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21909418/