$ rootScope和$ rootScope之间有什么区别。$ root?
之间有什么区别
$ rootScope.global.flag = true和$ rootScope。$ root.global.flag = true
他们俩都是在rootscope中访问同一个变量吗?
如果是这样,是否有任何特殊情况需要使用其中任何一种?
答案 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
对于隔离范围将为空(因为它没有父级)。