将$rootScope注入控制器以使用或覆盖在 AngularJS 中$rootScope下定义的模型/方法是否有效



我在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注入控制器如何进行身份验证?

我直言,我认为将$rootScope注入控制器是可以的。我建议使用发射/广播。

不需要将

$rootScope注入控制器。注入$scope时,由于范围继承,你会自动访问$rootScope中定义的任何内容。请参阅文档。向下滚动到"范围层次结构"部分。

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

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

相关内容

最新更新