我们有一个API,要求每个请求都包含一个应用程序ID。我希望这个id可以在每个控制器中访问,我理想的是只想设置一次。我可以通过以下方式将其设置为顶级:
angular.module('applicationName',
['controller1', 'controller2', 'controller3'])
.constant('APPLICATION_ID', '12345abcde');
但我希望能够在controller1 / 2/3中访问它。设置APPLICATION_ID变量的最佳方法是什么,以便它可以在应用程序的所有组件中使用?
答案 0 :(得分:2)
angular.module('applicationName',
['controller1', 'controller2', 'controller3'])
.constant('APPLICATION_ID', '12345abcde');
然后在你的控制器中
application.controller('myController',
['$scope','APPLICATION_ID',function($scope,applicationId)
{
console.log("app id="+applicationId);
}]);
答案 1 :(得分:0)
由于您需要向api发送每个请求的Application_ID
,如评论中所述,您可以修改$http
服务以添加ID。
定义常量
angular.module('myModule')
.constant('APPLICATION_ID', 'foobarbaz');
将常量注入您的$http
服务,以便随每个请求发送。
angular
.module('myModule')
.config(httpConfig);
httpConfig.$inject = ['$httpProvider', '$provide'];
function httpConfig($httpProvider, $provide) {
$provide.factory('httpInterceptor', ['APPLICATION_ID', function (APPLICATION_ID) {
return {
request: function (config) {
// APPLICATION_ID can now be used in all your requests
// Example:
// To URL: GET /api/v1/users?appid=foobarbaz
if (config.mehtod === 'GET') {
var sep = config.url.indexOf('?') === -1 ? '?' : '&';
config.url = config.url + sep + 'appid=' + APPLICATION_ID;
}
return config;
}
};
}]);
}
$httpProvider.interceptors.push('httpInterceptor');
现在,您可以在所有请求中使用Application_ID
,而无需将其注入所有控制器。
<强>资源强>
https://docs.angularjs.org/api/ng/service/ $ HTTP