6

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

和有什么区别

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

他们都访问 rootscope 中的同一个变量吗?

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

4

1 回答 1

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对于孤立的作用域将是空的(因为它没有父作用域)。

于 2015-10-22T14:02:37.720 回答