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不可能为空。