我有一个共享函数,它返回我的AngularJS应用程序中最顶层元素(文档)的范围。
function topScope() {
return angular.element(document).scope();
}
这始终有效,我始终保证可以访问应用程序中的任何子范围(无论是在控制器内还是指令内)。
以下是我将其用于:
的示例topScope().$emit('pageReady');
现在我注意到$ rootScope的工作方式也一样。
$rootScope.$emit('pageReady');
哪个也有效并达到同样的效果。但是因为$ rootScope被设计成“现成的$ scope”范围(创建的任何范围将继承它的方法和属性)然后这仍然意味着它实际上是页面的最顶层范围?因此,作为附加到文档节点的范围对象的父级?
答案 0 :(得分:24)
$rootScope
是给定AngularJS应用程序中所有作用域的父作用域。由于可以在一个页面上引导多个AngularJS应用程序(仅手动,但无法使用ng-app
完成),因此在一个HTML文档中也可以有多个$rootScope
个实例。
每个$rootScope
都“附加”到声明了ngApp的元素或传递给angular.bootstrap的元素,如here所述。
简而言之,$rootScope
是一个AngularJS应用程序的所有范围的根,但没有“超级根”范围可用作给定HTML文档的所有其他范围的父范围。
如果您在整个HTML文档中只有一个AngularJS应用程序,那么使用$rootScope
可能没问题。