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

时间:2012-11-30 05:59:52

标签: angularjs

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

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

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

以下是我将其用于:

的示例
topScope().$emit('pageReady');

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

$rootScope.$emit('pageReady');

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

1 个答案:

答案 0 :(得分:24)

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

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

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

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