我在App.run
下面定义了一些模型,我在控制器someCtrl
中覆盖了这些模型:
App.run(['$rootScope', function($rootScope) {
$rootScope.attempt = 1;
});
function someCtrl($scope, $rootScope) {
$rootScope.attempt = 2;
$rootScope.checkAttempt = function () {
return $rootScope.attempt > 1 ? true : false;
};
}
页面上有一个按钮someCtrl's
范围:
<button class='btn' ng-disabled="checkAttempt()">Who's changing my value?</button>
仅供参考,我知道创建服务或使用emit-broadcaste机制在控制器之间共享数据,但我想知道如何将$ rootScope注入控制器?
答案 0 :(得分:10)
恕我直言,我认为可以将$rootScope
注入控制器。我建议使用emit / broadcast。
答案 1 :(得分:8)
您无需将$ rootScope注入控制器。当您注入$ scope时,由于范围继承,您可以自动访问$ rootScope中定义的任何内容。见documentation。向下滚动到“范围层次结构”部分。
答案 2 :(得分:1)
嗯,将$rootScope
注入控制器,服务或指令没有任何害处,但你确实试图弄清楚它是否真的有必要。原因是任何绑定到$rootScope
的方法或属性都会使其成为全局的,除非手动清理并且它会创建全局变量创建的所有问题,否则它不会被GC化。
跨多个控制器共享数据的最佳方法是使用服务。