将$ rootScope注入Controller是否有效使用或覆盖AngularJS中$ rootScope下定义的模型/方法?

时间:2012-10-13 17:21:25

标签: angularjs

我在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注入控制器?

3 个答案:

答案 0 :(得分:10)

恕我直言,我认为可以将$rootScope注入控制器。我建议使用emit / broadcast。

答案 1 :(得分:8)

您无需将$ rootScope注入控制器。当您注入$ scope时,由于范围继承,您可以自动访问$ rootScope中定义的任何内容。见documentation。向下滚动到“范围层次结构”部分。

答案 2 :(得分:1)

嗯,将$rootScope注入控制器,服务或指令没有任何害处,但你确实试图弄清楚它是否真的有必要。原因是任何绑定到$rootScope的方法或属性都会使其成为全局的,除非手动清理并且它会创建全局变量创建的所有问题,否则它不会被GC化。

跨多个控制器共享数据的最佳方法是使用服务。