16

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

function topScope() { 
  return angular.element(document).scope();
}

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

这是我将其用于的示例:

topScope().$emit('pageReady');

现在我注意到 $rootScope 也以同样的方式工作。

$rootScope.$emit('pageReady');

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

4

1 回答 1

24

$rootScope是给定 AngularJS 应用程序中所有作用域的父作用域。由于可以在一个页面上引导多个 AngularJS 应用程序(只能手动,这不能使用 来完成ng-app),因此也可以$rootScope在一个 HTML 文档中有多个实例。

每个$rootScope都“附加”到声明 ngApp 的元素或传递到angular.bootstrap的元素,如此所述。

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

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

于 2012-11-30T18:23:57.977 回答