将$ route注入http拦截器

时间:2014-01-20 08:24:48

标签: angularjs angular-http-interceptors

我正在尝试为每个API请求注入自定义标头。当我提供一些硬编码文本时,它可以工作。

工作代码

myApp.config(['$httpProvider', function ($httpProvider) {
    var requestInterceptor = ['$q', '$rootScope', 
        function ($q, $rootScope) {
            var interceptorInstance = {
                request: function (config) {
                    config.headers['X-MyApp-CustomHeader'] = "foobar"; 
                    return config || $q.when(config);
                }
            };
            return interceptorInstance;
        }];

    $httpProvider.interceptors.push(requestInterceptor);
}]);

无效代码

myApp.config(['$httpProvider', function ($httpProvider) {
    var requestInterceptor = ['$q', '$rootScope', '$route',
        function ($q, $rootScope, $route ) {
            var interceptorInstance = {
                request: function (config) {
                    config.headers['X-MyApp-CustomHeader'] = $route.current.params.CustomParameter; 
                    return config || $q.when(config);
                }
            };
            return interceptorInstance;
        }];

    $httpProvider.interceptors.push(requestInterceptor);
}]);

错误,尝试注入$route

  

未捕获错误:[$ injector:cdep]找到循环依赖项:$ route< - $ http   http://errors.angularjs.org/1.2.3/ $ injector / cdep?p0 =%24route%20%3C-%20%24http

1 个答案:

答案 0 :(得分:18)

这是一个已知的issue

查看我的答案:Is there a way to request $http for an interceptor?

$route取决于$httpmyApp.config(['$httpProvider', function ($httpProvider) { var requestInterceptor = ['$q', '$rootScope', '$injector', function ( $q, $rootScope, $injector ) { var interceptorInstance = { request: function (config) { var $route = $injector.get('$route'); config.headers['X-MyApp-CustomHeader'] = $route.current.params.CustomParameter; return config || $q.when(config); } }; return interceptorInstance; }]; $httpProvider.interceptors.push(requestInterceptor); }]); 依赖于拦截器:

{{1}}

什么是$ injector?

  

$ injector用于检索由提供程序,实例化类型,调用方法和加载模块定义的对象实例。

在内部,angular.js会使用$ injector来调用你注入了所有依赖项的方法(config / run blocks)。这会自动发生,因此您很少需要担心它。 如果$ injector无法解析您的依赖关系,您可以手动执行此操作。