2016-04-26 89 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; 
     } 
});