[英]Globally set custom HTTP header in AngularJS from ngInit
我无法设置从AngularJS中的ngInit
获取的自定义HTTP标头。
我在html中使用ngInit设置了变量:
<div ng-init="myApiKey='valueOfVar'"></div>
现在,我想在所有HTTP请求中使用此变量。 我试图在app.config和控制器中设置它。
如果我立即设置,则变量未定义。
如果我在$scope.$watch
回调函数中设置了变量,则定义了变量,但是HTTP请求没有该标头。
我设置标头与:
$http.defaults.headers.common.Authorization = 'something';
(或在app.config中时通过$httpProvider
),然后通过$resource
在服务中使用它。 我的代码看起来像[this] [1]
我试图在config
, run
,controller和服务中设置它,但是对我来说什么都没有用。 预先感谢您提供任何建议。
编辑:现在我有拦截器:
myApp.config(function ($httpProvider) {
$httpProvider.interceptors.push('httpRequestInterceptor');
});
myApp.factory('httpRequestInterceptor', ['$rootScope', function($rootScope) {
return {
request: function($config) {
$config.headers['Authorization'] = 'Basic ' + $rootScope.apiKey;
return $config;
}
};
}]);
但是$rootscope.apiKey
(在主控制器中设置)在第一次调用时undefined
。 之后,就可以了(并设置)。
以下代码将允许您拦截应用程序的所有http请求,并在请求的标头中添加属性“ language”
angular.module('app', ['ngRoute', 'ngResource']).run(function($http) {
$http.defaults.headers.common.language='fr-FR';
});
我们可以在http标头中添加许多属性
如果您想在AngularJS中修改请求/响应,则应深入了解Interceptor :
您可以调用$ http(config),其中config是每个配置的对象。 headers
有一个配置,您应该在其中放置代码:
标头– {Object} –字符串或函数的映射,这些字符串或函数返回表示HTTP标头的字符串以发送到服务器。 如果函数的返回值为null,则不会发送标头。
如果您搜索有关Interceptor的信息,则将获得完整的博客列表,其中解释了如何使用它,并提供了示例代码,这在一段时间之前对我有帮助:
好的,所以对于任何想做同样事情的人来说, 拦截器是关键(非常感谢Fals ),但是$rootScope
问题是。 正如我在写问题时所写的那样,当首次调用Interceptor时,尚未设置$rootScope.apiKey
(在连续的请求中,它已经被设置)。
正确的方式(或工作方式 )是不通过ngInit
而是通过$window
将变量传递给AngularJS。 所以我添加了我的HTML代码:
<script>window.apiKey = 'myValue';</script>
然后将其传递给Interceptor,方法与$rootScope
完全相同-您可以用$window
替换我编辑问题时出现的$rootScope
所有出现,并且现在可以使用-即使是第一个请求!
再次感谢您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.