【问题标题】:Using $state.go in $http response interceptor在 $http 响应拦截器中使用 $state.go
【发布时间】:2015-11-09 18:51:54
【问题描述】:

我正在尝试在使用 http 拦截器接收禁止或未经授权的 http 请求时进行状态导航,但我在 $state.go 承诺中收到错误

Error: transition superseded

这是我的 responseError 拦截器:

angular.module('starter')

.factory('httpResponseInterceptor', function($injector) {
    return {
        responseError: function(errorResponse) {

            var loginParams = {
                info: true,
                reason: 'Please login.',
                title: errorResponse.data
            };
            var $state = $injector.get('$state');

            switch (errorResponse.status) {
                case 403:
                    $state.go('login', loginParams).then(function() {}, function(res) {
                        console.log(res);
                    });
                    break;
                case 401:
                    $injector.get('$state').go('login', loginParams);
                    break;
            }

            return errorResponse;
        }
    };
});

在这种情况下有什么方法可以使用拦截器吗? 不过,在 $state.go 周围加上一个超时就可以了

【问题讨论】:

    标签: javascript angularjs angular-ui-router


    【解决方案1】:

    首先,拦截器的工作不是执行 UI 操作。应该有一个 AuthService/Provider/Controller,您应该在其中发送拦截器捕获的数据,并根据该数据,在那里采取所需的操作。您可以使用事件系统或调用服务内的方法。

    这可能无法解决您的问题,但会解决您未来的挑战。

    来自克鲁日的问候。

    【讨论】:

      【解决方案2】:

      我认为问题在于,您可能已经处于状态转换中,但错误拦截器启动,然后您尝试进行另一个转换。

      我总是明确拒绝错误拦截器捕获的当前正在解决的承诺:

      您应该在拦截器中注入$qservice 并执行return $q.reject(errorResponse);,而不是执行return $q.reject(errorResponse);

      【讨论】:

        【解决方案3】:

        @FlorianTopf 说,您可能已经处于状态转换中。你可以考虑 $stateChangeError 事件:

        $rootScope.$on('$stateChangeError',
                function(event, toState, toParams, fromState, fromParams, error) {
                    console.log(event, toState, fromState, error);
                    if (something) {
                        $state.go('error', toParams, {
                            reload: false
                        });
                    }
                });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-07-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-23
          相关资源
          最近更新 更多