2016-04-26 93 views
1

我想一個全球性的可行添加到所有控制器的範圍內的每個控制器的範圍angularjs - 變量動態添加到

我可以做手工在每個控制器一樣......

如果變量是

<script> 
    var base_url ="http://localhost/myapp/"; 
</stript> 

然後

app.controller('myController',[$scope','$window', 
    function($scope, $window) { 
     $scope.base_url = $window.base_url; 
    } 
]); 

我還可以使用$rootScopeservice

但我想將這個變量添加到每個控制器的動態範圍。那麼有沒有辦法做到這一點?

回答

5

可能的解決方案:

如果它是一個多變量的常數,你需要傳遞給所有控制器,因此,例如,它是永遠不會改變,你可以使用角度方法的URL constant

實施例:

app.constant('BASE_URL','http://localhost/myapp/'); 

然後,在每個控制器你注入它:

app.controller('Ctrl', ['$scope','BASE_URL' , function ($scope, BASE_URL){ 
    $scope.base_url = BASE_URL; 
}]) 

替代方案:

  • 服務
  • $ rootScope
0

有一個支持angular的base標記,以確保您的javascript(模板,$ http,...)中的每個URL都是相對於該標記的。所以,你可以使用它:https://docs.angularjs.org/#!/guide/ $位置

其他方式是:

  1. $ rootScope正如你所提到
  2. 活動,所有的控制要求值可以偵聽特定的事件,以獲得新的價值。
  3. 服務。 $ watch是價值或者再次使用事件
  4. 如果它沒有改變,並且您可以知道啓動時的值,則可以使用angular.constant來定義並注入一個常數balue。但這似乎已經超出了你的主題。
0

對控制器的輸入另一個方案是NG-INIT指令。 https://docs.angularjs.org/api/ng/directive/ngInit

<div ng-controller="MyCtrl as $ctrl" 
    ng-init="$ctrl.init({baseUrl: 'http://localhost/myapp/'})"></div> 

angular.module('myApp').controller('MyCtrl', function() { 
     this.init = function (inputData) { 
      console.log(inputData); // {baseUrl: 'http://localhost/myapp/'} 
      this.baseUrl = inputData.baseUrl; 
     } 
});