Javascript $rootScope和$rootScope之间的差异。$root

Javascript $rootScope和$rootScope之间的差异。$root,javascript,angularjs,rootscope,angularjs-rootscope,Javascript,Angularjs,Rootscope,Angularjs Rootscope,$rootScope和$rootScope.$root之间有什么区别吗 两者的区别是什么 $rootScope.global.flag=true和$rootScope.$root.global.flag=true 它们是否都访问根范围中的同一个变量 如果是这样的话,是否有任何特殊情况下我们必须使用它们中的任何一个?角度中的所有范围都是同一原型的实例。因此,全局服务$rootScope与为指令创建的对象类型相同,并作为$scope或控制器传递给链接函数 属性$root是该原型的一部分,可在所有范围

$rootScope和$rootScope.$root之间有什么区别吗

两者的区别是什么

$rootScope.global.flag=true和$rootScope.$root.global.flag=true

它们是否都访问根范围中的同一个变量


如果是这样的话,是否有任何特殊情况下我们必须使用它们中的任何一个?

角度中的所有范围都是同一原型的实例。因此,全局服务
$rootScope
与为指令创建的对象类型相同,并作为
$scope
或控制器传递给链接函数

属性
$root
是该原型的一部分,可在所有范围内使用

$rootScope
是Angular创建的第一个范围。所有作用域都是使用现有作用域中的
$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>
{{$root.someValue}
还有其他属性,如
$parent
,可以让您沿着作用域链走,但是
$parent
对于独立作用域将为空(因为它没有父级)