首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何理解rootScope?

如何理解rootScope?
EN

Stack Overflow用户
提问于 2017-02-17 10:57:43
回答 3查看 671关注 0票数 1

我正在学习angularjs。当我学习scope时,我看到了rootScope。但我真的不明白它是什么。

例如:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>

<div ng-app="myApp" ng-controller="myCtrl">

<h1>Family Name {{lastname}} Members:</h1>

<ul>
    <li ng-repeat="x in names">{{x}} {{lastname}}</li>
</ul>

</div>

<script>
var app = angular.module('myApp', []);

app.controller('myCtrl', function($scope, $rootScope) {
    $scope.names = ["Emil", "Tobias", "Linus"];
    $rootScope.lastname = "Refsnes";
});
</script>

</body>
</html>

但是我不明白下面的代码有什么区别:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>

<div ng-app="myApp" ng-controller="myCtrl">

<h1>Family Name {{lastname}} Members:</h1>

<ul>
    <li ng-repeat="x in names">{{x}} {{lastname}}</li>
</ul>

</div>

<script>
var app = angular.module('myApp', []);

app.controller('myCtrl', function($scope) {
    $scope.names = ["Emil", "Tobias", "Linus"];
    $scope.lastname = "Refsnes";
});
</script>

</body>
</html>

那么,如果scope和rootScope之间没有区别,为什么我们需要使用rootScope呢?

我希望有人能给我一个简单的例子,这样我就可以很容易地理解rootScope。

EN

回答 3

Stack Overflow用户

发布于 2017-02-17 11:58:42

我想对@Yaser答案进行补充。我将使用google chrome控制台来解释整个网页中所有作用域继承的$rootScope层次结构。

步骤1:打开chrome web developer工具,用ng-app = "myApp"选择div

步骤2:转到chrome web开发人员工具的控制台,输入angular.element($0).scope(),这将为您获取一个包含$rootScope详细信息的对象。

您将在此处找到一个属性Refsnes:"Refsnes"

步骤3:转到Elements选项卡并选择其中一个<li>

步骤4:在控制台中输入angular.element($0).scope(),这将获取包含所选作用域详细信息的对象

展开parent属性,您将找到rootScope的属性Refsnes lastname:“

这应该解释了$rootScope是如何被网页上的所有其他作用域继承的

票数 2
EN

Stack Overflow用户

发布于 2017-02-17 11:07:05

每个应用程序都有一个single根作用域。所有其他作用域都是根作用域的后代作用域。作用域通过监视模型更改的机制在模型和视图之间提供分离。它们还提供事件发射/广播和订阅功能。

更多信息here

然而,一个非常简单的解释是考虑rootScope和所有子作用域的原始父作用域。如果你想象一个层次结构,rootScope在顶端。

在你的例子中没有涉及rootScope,它只是一个当前的作用域。因此,在父作用域中有一个lastname,由于ng-repeat创建了一个子作用域,因此每个子作用域也都有一个lastname

票数 1
EN

Stack Overflow用户

发布于 2018-01-02 15:04:45

$rootScope是最顶层的作用域。一个应用程序只能有一个$rootScope,它将在应用程序的所有组件之间共享。因此,它的作用就像一个全局变量。所有其他$scopes都是$rootScope的子项。

代码语言:javascript
复制
var app = angular.module('myApp', []);

app.controller('Ctrl1', ['$scope','$rootScope', function ($scope,$rootScope) {
  
   $rootScope.name = "Rahul";
}]);

app.controller('Ctrl2', ['$scope','$rootScope', function ($scope,$rootScope) {
   $scope.name = $rootScope.name;
}]);
代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en-US" ng-app="myApp">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<body>

<div>
  
<div ng-controller="Ctrl1">  
    <span>{{name}}</span> - controller -1
</div>
<hr>
<div ng-controller="Ctrl2">
    <span>{{name}}</span> - controller -2      
</div>
</div>

</body>
</html>

var app = angular.module('myApp',[])在此处输入图像描述//此处rootScope仅创建一次

从链接检查结构:- https://i.stack.imgur.com/rzBj3.png

下面是rootScope在将数据从一个控件传递到另一个控件时的简单用法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42288604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档