谁能解释 $scope 和 $rootScope 之间的区别?
我认为
$范围:
我们可以通过使用它从特定页面获取特定控制器中的 ng-model 属性。
$rootScope
通过使用它,我们可以从任何页面获取任何控制器中的所有 ng-model 属性。
这个对吗?或者别的什么?
谁能解释 $scope 和 $rootScope 之间的区别?
我认为
我们可以通过使用它从特定页面获取特定控制器中的 ng-model 属性。
通过使用它,我们可以从任何页面获取任何控制器中的所有 ng-model 属性。
这个对吗?或者别的什么?
主要区别在于分配给对象的属性的可用性。分配给的属性$scope
不能在定义它的控制器之外使用,而分配给的属性$rootScope
可以在任何地方使用。
例如:如果你在下面的例子中替换$rootScope
用$scope
的部门属性将不会在第二个从第一控制器填充
angular.module('example', [])
.controller('GreetController', ['$scope', '$rootScope',
function($scope, $rootScope) {
$scope.name = 'World';
$rootScope.department = 'Angular';
}
])
.controller('ListController', ['$scope',
function($scope) {
$scope.names = ['Igor', 'Misko', 'Vojta'];
}
]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="example">
<div class="show-scope-demo">
<div ng-controller="GreetController">
Hello {{name}}!
</div>
<div ng-controller="ListController">
<ol>
<li ng-repeat="name in names">{{name}} from {{department}}</li>
</ol>
</div>
</div>
</body>
根据 Angular's Developer's Guide to Scopes:
每个 Angular 应用程序只有一个根作用域,但可能有多个子作用域。应用程序可以有多个作用域,因为某些指令会创建新的子作用域(请参阅指令文档以了解哪些指令会创建新的作用域)。创建新作用域时,它们将作为其父作用域的子项添加。这将创建一个树结构,该结构与它们所附加的 DOM 平行。
控制器和指令都引用了作用域,但彼此之间没有引用。这种安排将控制器与指令以及 DOM 隔离开来。这一点很重要,因为它使控制器与视图无关,从而极大地改善了应用程序的测试故事。
$rootScope
全局可用,无论您在哪个控制器中,而$scope
仅对当前控制器及其子控制器可用。
换句话说,我们可以看看这个;$rootScope
是全局的,$scope
而是本地的。WhenController
分配给页面,因此$scope
可以在此处使用变量,因为它绑定到此控制器。但是当我们想将它的值共享给其他控制器或服务时,$rootScope
则被使用(**有其他方法,我们可以共享值,但在这种情况下我们想使用$rootScope
)。
关于如何定义这两个词的第二个问题是正确的。
最后有点偏离轨道,请$rootScope
谨慎使用。与您使用全局变量的方式类似,调试起来可能会很痛苦,并且您可能会不小心更改计时器内某处的全局变量或使您的阅读不正确的东西。