$ rootScope和$ rootScope.$ root之间的区别

Nit*_*aby 6 javascript angularjs rootscope angularjs-rootscope

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

有什么区别

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

他们俩都在rootcope中访问同一个变量吗?

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

Rea*_*lar 3

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

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

$rootScope是 Angular 创建的第一个作用域。所有作用域都是使用$new现有作用域中的方法创建的。这$rootScope是一个特殊情况,因为它是angular.run()在模块上执行之前创建的。

当您检查它的值时,它$scope.$root引用根范围服务提供的同一实例$rootScope

所以;

console.log($rootScope === $scope.$root); // will print true
Run Code Online (Sandbox Code Playgroud)

或者就像你的例子一样;

console.log($rootScope === $rootScope.$root); // will also print true
Run Code Online (Sandbox Code Playgroud)

所以是的,无论您如何引用根作用域,根作用域中的变量都是相同的。

console.log($rootScope.global.flag); // prints true
console.log($scope.$root.global.flag); // prints true
console.log($rootScope.$root.global.flag); // prints true
Run Code Online (Sandbox Code Playgroud)

您还可以像这样在模板表达式中显式访问根范围。

<div>{{$root.someValue}}</div>
Run Code Online (Sandbox Code Playgroud)

还有其他类似的属性$parent可以让您沿着作用域链向上走,但$parent对于隔离作用域来说将为空(因为它没有父级)。