将变量动态添加到每个控制器的作用域

dynamically add a variable to the scope of each controller

本文关键字:控制器 作用域 变量 动态 添加      更新时间:2023-09-26

我想在所有控制器的作用域中添加一个全局可行

我可以在每个控制器中手动执行此操作,例如...

如果变量为

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

然后

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

我也可以使用$rootScopeservice

但我想动态地将此变量添加到每个控制器的作用域中。那么有什么可能的方法可以做到这一点吗?

可能的解决方案:

如果它是一个常量而不是一个变量,你需要传递给所有控制器,例如它是一个永不改变的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

有一个支持 angular 的 base 标签,以确保 javascript 中的每个 URL(模板、$http,...)都与该 URL 相关。所以你可以使用它:https://docs.angularjs.org/#!/guide/$location

其他方式是:

  1. $rootScope正如你提到的
  2. 事件
  3. ,所有控制器都要求该值可以侦听特定事件以获取新值。
  4. 服务。要么$watch是值,要么再次使用事件
  5. 如果它没有改变,并且你可以在引导时知道值,你可以使用angular.constant来定义然后注入一个常量 balue。不过,这个似乎不适合你。

控制器输入的另一种选择是 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;
      }
});