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

mat*_*sko 16 angularjs

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

function topScope() { 
  return angular.element(document).scope();
}
Run Code Online (Sandbox Code Playgroud)

这始终有效,我始终保证可以访问应用程序中的任何子范围(无论是在控制器内还是指令内).

这是我将用它的一个例子:

topScope().$emit('pageReady');
Run Code Online (Sandbox Code Playgroud)

现在我注意到$ rootScope的工作方式也一样.

$rootScope.$emit('pageReady');
Run Code Online (Sandbox Code Playgroud)

哪个也有效并达到同样的效果.但由于$ rootScope设计是"$范围现成的"范围则没有这仍然意味着它实际上是在页面的最上面的范围(创建将继承它的方法和属性的任何范围)?因此作为附加到文档节点的范围对象的父级?

pko*_*rce 24

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

每个$rootScope被"附加"到一方位置ngApp被宣布该元件或通入元件angular.bootstrap如所描述这里.

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

在你的情况下,$rootScope如果你在整个HTML文档中只有一个AngularJS应用程序,则可能没问题.

  • 这是对的.旁注,如果你有两个$ rootScope,因为你有两个应用程序,你需要它们互相交谈,你可以使用$ window ...看起来像一个边缘案例,但值得一提. (7认同)