$rootScope 和 $rootScope.$root 的区别
Difference between $rootScope and $rootScope.$root
$rootScope和$rootScope.$root有区别吗?
有什么区别
$rootScope.global.flag = true 和 $rootScope.$root.global.flag = true
他们都访问根作用域中的同一个变量吗?
如果是这样,是否有任何特定情况我们必须使用它们中的任何一个?
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
对于独立作用域而言将为 null(因为它没有父级)。
$rootScope和$rootScope.$root有区别吗?
有什么区别$rootScope.global.flag = true 和 $rootScope.$root.global.flag = true
他们都访问根作用域中的同一个变量吗?
如果是这样,是否有任何特定情况我们必须使用它们中的任何一个?
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
对于独立作用域而言将为 null(因为它没有父级)。