AngularJS。根据当前路由设置默认标头

时间:2014-03-21 15:41:01

标签: angularjs

我需要在$ http服务中设置默认标头,具体取决于当前路由。这是代码:

$http.defaults.headers.common.HeaderName = 'HeaderValue';

我需要观察当前$location.path并根据路线更改标题的值。

我可以将此代码放在$ routeProvider部分吗?类似的东西:

$routeProvider
    .when('/route', {
        templateUrl: 'book.html',
        controller: 'BookController',
        resolve: function() {
                     //set default header here
        }
    })

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

$routeProvider是一个提供者,但另一方面$http是一个实例,所以基本上你无法为配置块注入一个实例,你设置{{1} },但你可以注入最适合你的$ http实例运行块 ......

好吧,让我们解决你遇到的问题,实际上你可以做任何你想要的控制器,但是你希望它在仅位置/路线改变时做,所以让我们注入另一个实例$ rootScope运行块来观察位置/路由变化......

但是还有一个请求集$routeProvider取决于$http.defaults,所以让我们注入另一个实例$location.path()来运行块来获取当前路径......

所以这是我们的最终运行块

$location

从现在开始,每次更改位置后触发我们设置app.run(function($rootScope, $http, $location) { $rootScope.$on('$locationChangeSuccess', function(event, next, current) { $http.defaults.headers.common.HeaderName = $location.path(); console.log("Headers :",$http.defaults.headers); }); }); 的手表取决于$http.headers ......

此处正在运作PLUNKER

<强>更新

如果您想查看其他$location.path()$route个事件,请检查此PLUNKER

答案 1 :(得分:0)

您可以通过收听$routeChangeStart事件并更改默认值来更改基于位置的标头:

$rootScope.$on( '$routeChangeStart', function() {
    $http.defaults.headers.common.headerName = 'Path is ' + $location.path();
});