Javascript 如果我可以使用$scope.$root,为什么要使用$rootScope?

Javascript 如果我可以使用$scope.$root,为什么要使用$rootScope?,javascript,angularjs,angularjs-scope,angularjs-rootscope,Javascript,Angularjs,Angularjs Scope,Angularjs Rootscope,既然$scope.$root是对$rootScope的引用,因此也是一样的事情,如果我已经通过$scope.$root访问了$rootScope,那么当我需要使用它时,为什么还要费心注入$rootScope?使用$rootScope而不是$scope.$root的原因是什么,无论是AngularJS最佳实践还是一般编程最佳实践 为清楚起见,这不是关于何时使用$rootScope的问题。它问我为什么要使用它。$rootScope:var,它指向所有作用域的父级,可以在任何地方注入。所有其他作用域都

既然
$scope.$root
是对
$rootScope
的引用,因此也是一样的事情,如果我已经通过
$scope.$root
访问了
$rootScope,那么当我需要使用它时,为什么还要费心注入
$rootScope
?使用
$rootScope
而不是
$scope.$root
的原因是什么,无论是AngularJS最佳实践还是一般编程最佳实践


为清楚起见,这不是关于何时使用
$rootScope
的问题。它问我为什么要使用它。

$rootScope:var,它指向所有作用域的父级,可以在任何地方注入。所有其他作用域都是$rootScope的子级。它们是通过$rootScope的$new方法创建的,因此每个范围都继承自$rootScope

$scope.$root:保存对$rootScope的引用

使用$scope.$root和使用$rootScope之间存在差异:

当$scope是根时,其$root属性为null

$scope.$root仅在隔离作用域上分配
因此,您可能会遇到$scope.$root为null的情况。最好改用$rootScope…

在应用程序中使用
$rootScope
是有意义的。正如您提到的,
$scope.$root
只是当前
$scope
中对
$rootScope
的引用。如果要引用根范围,应该插入并使用
$rootScope
,因为它是顶级
$scope
的显式声明

然而,一般来说,AngularJS最佳实践通常会导致开发人员偏离使用
$rootScope
。尽管在应用程序中的任何位置都可以注入全局作用域是很方便的,但它通常被过度使用和滥用,导致
$rootScope
对象上存在太多对象,这可能导致大型AngularJS应用程序的性能变慢


通常,当我考虑使用
$rootScope
全局保存某些内容时,我会停下来想一分钟,看看哪种方法更好。也许更好的解决方案是注入一个共享的服务/工厂,而不是依赖
$rootScope

这在某种程度上是一个品味问题,因为众所周知,
$rootScope====$scope.$root
,尽管
$rootScope
的性能稍微好一点,缩小效果也更好

在现代AngularJS应用程序中,
$scope
没有被大量使用<代码>$scope
在具有controllerAs语法的控制器(包括组件控制器)中并不总是可用<代码>$scope在服务中也不可用


$rootScope
通常用于代替
$scope.$root
为了一致性,当需要引用根范围时。

究竟什么是$root.$scope?@WilliamHampshire谢谢,我将编辑它…重复的问题已经回答:^这已经回答了(在@flyer:P发布前几秒钟发布了此消息)当
$scope
$rootScope
时,
$root
为空时,
$rootScope
为非真。$scope.$root仅在隔离作用域上赋值…原型继承其他情况。正常情况下,$scope.$root不可能为空。