Angular:在Interceptor中使用$ rootScope

时间:2016-02-02 15:37:32

标签: angularjs

我有一个控制器:

 app.controller('MyController', function ($scope, $http, $rootScope, AuctionService) {

    $scope.setToken = function (code) {
        $rootScope.access_token = code;
    };
    AuctionService.auctions();
});

我在access_token中设置$rootScope并希望在拦截器中使用它:

app.factory('httpRequestInterceptor', ['$rootScope', function ($rootScope) {
    return {
        request: function ($config) {
            $config.headers = {'Authentication': 'Bearer ' + $rootScope.access_token};
            return $config;
        }
    };
}]);

但我的access_token始终未定义。据我所知,它应该像这样工作。如果您有任何其他建议,如何在拦截器中使用access_token也可以。

2 个答案:

答案 0 :(得分:1)

我认为问题是在创建访问令牌之前创建了拦截器。根范围也不是令牌的好地方,最好的方法是将其包装到特殊服务中并使用它来提取它,例如tokenService.getToken(),然后您可以记住第一次访问时的令牌或每次从存储或类似的东西读取它。

您可能遇到的问题是拦截器中的循环引用,在这种情况下,您可以使用$ inject而不是使用构造函数注入自己注入服务,或使用其他一些技术来克服它。

答案 1 :(得分:0)

我认为你没有在run方法中定义$ rootScope变量。像

app.run(function($rootScope){
    $rootScope.access_token = null;
});