如果我可以使用$ scope,为什么我应该使用$ rootScope。$ root?

时间:2017-07-12 14:29:42

标签: javascript angularjs angularjs-scope angularjs-rootscope

由于$scope.$root是对$rootScope的引用,因此同样的事情,如果我已经通过{{{{}}已经有权访问它,我为什么要在需要使用它时注入$rootScope? 1}?使用$scope.$root而不是$rootScope是什么原因,无论是AngularJS最佳做法还是一般编程最佳做法?

为清楚起见, 这是关于何时使用$scope.$root的问题。它要求为什么我应该使用它。

3 个答案:

答案 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