由于$scope.$root
是对$rootScope
的引用,因此同样的事情,如果我已经通过{{{{}}已经有权访问它,我为什么要在需要使用它时注入$rootScope
? 1}?使用$scope.$root
而不是$rootScope
是什么原因,无论是AngularJS最佳做法还是一般编程最佳做法?
为清楚起见, 这是关于何时使用$scope.$root
的问题。它要求为什么我应该使用它。
答案 0 :(得分:1)
$ rootScope :var指向所有范围的父级,可以在任何地方注入。所有其他范围都是$ rootScope的子代。它们是通过$ rootScope的$ new方法创建的,因此每个范围都继承自$ rootScope。
$ scope。$ root :保存对$ rootScope的引用。
使用$ scope。$ root和使用$ rootScope:
之间存在差异当$ scope是root时,其$ root属性为null
$ scope。$ root仅在隔离范围上分配 所以你可能会遇到$ scope。$ root为null的情况。最好使用$ rootScope ......
答案 1 :(得分:0)
在您的应用程序中使用$rootScope
是有意义的。与您提到的一样,$scope.$root
只是您当前$rootScope
对$scope
的引用。如果您要引用根范围,则应注入并使用$rootScope
,因为它是顶级$scope
的显式声明。
但是,一般而言,AngularJS最佳实践通常会导致开发人员偏离使用$rootScope
。尽管可以在应用程序的任何位置注入全局范围很方便,但它通常被过度使用和滥用,导致$rootScope
对象上有太多对象,这可能导致较大的AngularJS应用程序中的性能降低。
通常,当我考虑使用$rootScope
来全局保存某些内容时,我会停下来思考一下更好的方法。也许更好的解决方案可能涉及注入共享服务/工厂而不是依赖$rootScope
。
答案 2 :(得分:0)
这在某种程度上是一种品味问题,因为$rootScope === $scope.$root
是一个众所周知的事实,即使$rootScope
性能稍微提高一点并且更好地缩小。
在现代的AngularJS应用中$scope
使用不多。 $scope
并非始终在具有controllerAs语法的控制器中可用,包括组件控制器。服务中也不提供$scope
。
$rootScope
代替$scope.$root
。