$rootScope和$rootScope.$root有什么区别吗?
两者有什么区别?
$rootScope.global.flag = true和$rootScope.$root.global.flag = true
它们是否都访问根范围中的相同变量?
如果是的话,我们是否有需要使用其中任何一种的特殊情况?
发布于 2015-10-22 14:02:37
角度上的所有范围都是同一个原型的实例。因此,全局服务$rootScope是为指令创建并作为$scope传递给链接函数或控制器的相同类型的对象。
属性$root是该原型的一部分,可在所有作用域上使用。
$rootScope是角创建的第一个作用域。所有作用域都是通过使用现有作用域的$new方法创建的。所以$rootScope是一个特例,因为它是在angular.run()在模块上执行之前创建的。
当您检查$scope.$root的值时,它引用了$rootScope根范围服务提供的相同实例。
因此;
console.log($rootScope === $scope.$root); // will print true或者像你的榜样一样;
console.log($rootScope === $rootScope.$root); // will also print true因此,不管如何引用根作用域,根作用域中的变量都是相同的。
console.log($rootScope.global.flag); // prints true
console.log($scope.$root.global.flag); // prints true
console.log($rootScope.$root.global.flag); // prints true您还可以显式地访问模板表达式中的根范围,如下所示。
<div>{{$root.someValue}}</div>还有其他属性(如$parent )允许您沿着作用域链向上走,但对于独立作用域(因为它没有父级),$parent将为空。
https://stackoverflow.com/questions/33282675
复制相似问题