2015-01-26 40 views
0

我們有一個API,要求每個請求都包含一個應用程序ID。我希望在每個控制器中都可以訪問此ID,並且我最好只設置一次。我可以將它設置在最高級別:Angularjs中的應用程序常量

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

但是我希望能夠在controller1/2/3中訪問它。設置APPLICATION_ID變量的最佳方法是什麼,以便在應用程序的所有組件中都可用?

+0

通常情況下,你只需要將它注入控制器?! – Yoshi 2015-01-26 18:55:41

+0

我寧願不必爲每個控制器注入64個字符的api密鑰(將會有多於三個)。我希望有更乾的方式來做到這一點。 – biagidp 2015-01-26 19:02:39

+0

爲什麼每個控制器都需要它?爲了記錄?然後修飾$ log服務。要包含在應用程序所做的每個HTTP請求中?然後修改$ http服務的默認值。如果您在每個控制器中都需要它,那麼注入每個控制器是正確的答案。如果您因爲其他原因需要它,那麼還有其他答案。 – 2015-01-26 19:11:18

回答

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); 

     }]); 
+0

當我需要傳入$ scope時,如何執行此操作?我在嘗試函數($ scope,applicationId)時收到$ scope的所有屬性的「無法賦值給只讀屬性」錯誤 – biagidp 2015-01-26 19:10:18

+1

我更新了示例答案。您只需傳入$ scope和其他任何您想要的內容,如上所示。 – Scott 2015-01-26 19:21:36

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

  • 見節 '設置HTTP頭' 如何修改標題發送
  • 見節 '攔截器' 的更詳細的例子比上面的要多