[英]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.