我在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,并且它会产生全局变量创建的所有问题。
在多个控制器之间共享数据的最佳方法是使用服务。