.config Angular 中的 $state.go

max*_*xum 2 angularjs

使用以下内容在我的应用程序中捕获 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不会起作用,因为它不能被注射。如何在这种状态下拉出我的登录页面。

Ori*_*ori 5

正如@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)