Angularjs中的应用程序范围常量

时间:2015-01-26 18:51:27

标签: javascript angularjs

我们有一个API,要求每个请求都包含一个应用程序ID。我希望这个id可以在每个控制器中访问,我理想的是只想设置一次。我可以通过以下方式将其设置为顶级:

angular.module('applicationName', 
['controller1', 'controller2', 'controller3'])
.constant('APPLICATION_ID', '12345abcde');

但我希望能够在controller1 / 2/3中访问它。设置APPLICATION_ID变量的最佳方法是什么,以便它可以在应用程序的所有组件中使用?

2 个答案:

答案 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

  • 请参阅&#39;设置HTTP标头&#39;关于如何修改发送的标题
  • 请参阅&#39;拦截器&#39;有关比上述更详细的例子