使用以下内容在我的应用程序中捕获 401
.config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push(function($q) {
return {
'responseError': function(rejection){
var defer = $q.defer();
if(rejection.status == 401){
$state.go('login', {}, {reload: true, inherit: false});
}
defer.reject(rejection);
return defer.promise;
}
};
});
}]);
Run Code Online (Sandbox Code Playgroud)
我知道这$state.go不会起作用,因为它不能被注射。如何在这种状态下拉出我的登录页面。
正如@Martin 所写,您可以在注入 $q 时注入 $state,但正如您所指出的,您有一个循环依赖,因为 $state 依赖于 $http(获取视图),但现在 $http 配置依赖于$state 也是。
为了打破这个循环,你可以使用 $injector 服务,并在完成所有依赖项检查后手动注入 $state:
.config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push(function($q, $injector) { // inject $injector service
return {
'responseError': function(rejection){
var $state = $injector.get('$state'); // manually inject $state service using $injector
var defer = $q.defer();
if(rejection.status == 401){
$state.go('login', {}, {reload: true, inherit: false});
}
defer.reject(rejection);
return defer.promise;
}
};
});
}]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1105 次 |
| 最近记录: |