Nit*_*aby 6 javascript angularjs rootscope angularjs-rootscope
$ rootScope和$ rootScope之间有什么区别.$ root?
有什么区别
$ rootScope.global.flag = true和$ rootScope.$ root.global.flag = true
他们俩都在rootcope中访问同一个变量吗?
如果是这样,是否有任何特殊情况我们必须使用它们中的任何一个?
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对于隔离作用域来说将为空(因为它没有父级)。