[英]Why should I use $rootScope if I can use $scope.$root?
由于$scope.$root
是对$rootScope
的引用,因此也是同一件事,如果我已经可以通过$scope.$root
访问它,为什么在需要使用$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为空的情况。 最好改用$ 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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.