繁体   English   中英

如果可以使用$ scope。$ root,为什么还要使用$ rootScope?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM