Angularjs $rootScope是最顶层的$scope的父级吗?

Angularjs $rootScope是最顶层的$scope的父级吗?,angularjs,Angularjs,我有一个共享函数,它返回AngularJS应用程序中最顶层元素(文档)的范围 function topScope() { return angular.element(document).scope(); } 这始终有效,并且我始终保证能够访问位于应用程序中的任何子作用域(无论是在控制器还是指令中) 下面是一个我将使用它的示例: topScope().$emit('pageReady'); 现在我注意到$rootScope也以同样的方式工作 $rootScope.$emit('page

我有一个共享函数,它返回AngularJS应用程序中最顶层元素(文档)的范围

function topScope() { 
  return angular.element(document).scope();
}
这始终有效,并且我始终保证能够访问位于应用程序中的任何子作用域(无论是在控制器还是指令中)

下面是一个我将使用它的示例:

topScope().$emit('pageReady');
现在我注意到$rootScope也以同样的方式工作

$rootScope.$emit('pageReady');

它也能起作用,达到同样的效果。但是既然$rootScope被设计成“$scope off-the-shelf”范围(创建的任何范围都将继承它的方法和属性),那么这是否仍然意味着它实际上是页面的最顶层范围?因此,作为附加到文档节点的scope对象的父级?

$rootScope
是给定AngularJS应用程序中所有作用域的父级作用域。由于可以在一个页面上引导多个AngularJS应用程序(仅手动,无法使用
ng app
),因此也可以在一个HTML文档中有多个
$rootScope
实例

每个
$rootScope
都“附加”到声明ngApp的元素或按所述传递到的元素

简而言之,
$rootScope
是一个AngularJS应用程序的所有作用域的根,但是没有“超级根”作用域可以作为给定HTML文档的所有其他作用域的父作用域


在您的例子中,如果整个HTML文档中只有一个AngularJS应用程序,那么使用
$rootScope
可能是可以的。

是的,rootScope是所有作用域的父级。这是正确的。附带说明,如果您有两个$rootscope,因为您有两个应用程序,并且需要它们相互通信,那么您可以使用$window。。。看起来像是边缘案件,但值得一提。