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

时间:2015-10-22 13:50:23

标签: javascript angularjs rootscope angularjs-rootscope

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

之间有什么区别

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

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

如果是这样,是否有任何特殊情况需要使用其中任何一种?

1 个答案:

答案 0 :(得分:3)

Angular中的所有范围都是同一原型的实例。因此,全局服务$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>

还有其他属性,如$parent,可以让您沿着范围链向前走,但$parent对于隔离范围将为空(因为它没有父级)。

相关问题