【问题标题】:Is $rootScope the parent of the topmost $scope?$rootScope 是最顶层 $scope 的父级吗?
【发布时间】:2014-11-27 04:15:12
【问题描述】:

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

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

这总是有效的,而且我总是可以访问位于应用程序内的任何子作用域(无论是在控制器还是指令内)。

这是我将使用它的示例:

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

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

$rootScope.$emit('pageReady');

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

【问题讨论】:

  • 是的,RootScope 是所有作用域的父级。

标签: angularjs


【解决方案1】:

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

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

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

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

【讨论】:

  • 这是正确的。旁注,如果您确实有两个 $rootScopes,因为您有两个应用程序并且需要它们相互通信,您可以使用 $window... 看起来像一个边缘案例,但值得一提。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多