将变量动态添加到每个控制器的作用域
dynamically add a variable to the scope of each controller
我想在所有控制器的作用域中添加一个全局可行
我可以在每个控制器中手动执行此操作,例如...
如果变量为
<script>
var base_url ="http://localhost/myapp/";
</stript>
然后
app.controller('myController',[$scope','$window',
function($scope, $window) {
$scope.base_url = $window.base_url;
}
]);
我也可以使用$rootScope
或service
但我想动态地将此变量添加到每个控制器的作用域中。那么有什么可能的方法可以做到这一点吗?
可能的解决方案:
如果它是一个常量而不是一个变量,你需要传递给所有控制器,例如它是一个永不改变的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
其他方式是:
- $rootScope正如你提到的 事件
- ,所有控制器都要求该值可以侦听特定事件以获取新值。
- 服务。要么$watch是值,要么再次使用事件
- 如果它没有改变,并且你可以在引导时知道值,你可以使用
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;
}
});
相关文章:
- 正在$rootScope上达到控制器作用域$在内部控制器上
- 从指令链接函数监视控制器作用域
- 控制器作用域变量在刷新之前未加载
- AngularJS:如何在指令范围的对象发生变化时更新与控制器作用域相关联的控制器作用域
- ng-click 指令不调用控制器作用域中定义的函数
- 如何从2级指令访问控制器作用域
- 角度指令控制器作用域继承
- 触发指令AngularJs的控制器作用域
- Angularjs-在路由更改时刷新控制器作用域
- 访问父指令's子指令中的控制器作用域变量
- 将Angular Service对象绑定到控制器作用域并更新
- UI引导日期选择器不调用内联控制器作用域上的函数
- 将变量从控制器作用域传递到指令
- 工厂中与控制器作用域绑定的已修改数据不会更新
- 带有双向绑定的孤立作用域指令不能反映控制器作用域的变化
- 如何在angular 1.4.5+中操纵指令中的控制器作用域
- AngularJS:在两个具有隔离作用域的指令之间共享一个控制器作用域
- 如何将控制器作用域变量传递给angular.元素在头部元素中追加子元素时
- AngularJS+Jasmine -在指令中写入一个控制器作用域
- 如何从嵌入式D3脚本中访问Angular控制器作用域