5

我在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>

仅供参考,我知道创建服务或使用发射广播机制在控制器之间共享数据,但我想知道将 $rootScope 注入控制器的身份验证方式是什么?

4

3 回答 3

10

恕我直言,我认为注入$rootScope控制器很好。我建议使用发射/广播。

于 2012-10-13T23:46:15.453 回答
8

您不需要将 $rootScope 注入控制器。当您注入 $scope 时,由于范围继承,您将自动访问 $rootScope 中定义的任何内容。请参阅文档。向下滚动到 Scope Hierarchies 部分。

于 2013-05-16T16:40:35.143 回答
1

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

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

于 2014-12-24T19:15:46.647 回答