我需要在$ http服务中设置默认标头,具体取决于当前路由。这是代码:
$http.defaults.headers.common.HeaderName = 'HeaderValue';
我需要观察当前$location.path
并根据路线更改标题的值。
我可以将此代码放在$ routeProvider部分吗?类似的东西:
$routeProvider
.when('/route', {
templateUrl: 'book.html',
controller: 'BookController',
resolve: function() {
//set default header here
}
})
这样做的正确方法是什么?
答案 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();
});