有人能解释一下 $scope 和 $rootScope 的区别吗?
我认为:
$scope:
我们可以通过使用 $scope,从特定页面的特定控制器中获取 ng-model 属性。
$rootScope
我们可以通过使用 $rootScope,在任何页面的任何控制器中获取所有的 ng-model 属性。
这个解释正确吗?还是有其他的东西需要注意?
有人能解释一下 $scope 和 $rootScope 的区别吗?
我认为:
我们可以通过使用 $scope,从特定页面的特定控制器中获取 ng-model 属性。
我们可以通过使用 $rootScope,在任何页面的任何控制器中获取所有的 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>
$rootScope
是全局可用的,无论你在哪个控制器中,而 $scope
只对当前控制器及其子控制器可用。
$rootScope
是全局的,而$scope
是本地的。当Controller
被分配到一个页面时,因此可以在这里使用$scope
变量,因为它绑定到该控制器。但是当我们想要在其他控制器或服务之间共享其值时,就会使用$rootScope
(**有替代方法,我们可以在不使用$rootScope
的情况下共享值,但在这种情况下,我们想要使用$rootScope
)。$rootScope
。与使用全局变量的方式类似,可能会使调试变得困难,并且您可能会在计时器或其他某个地方意外更改全局变量,从而使您的读数不正确。https://docs.angularjs.org/guide/scope
基本上,$rootScope和$scope都标识了DOM中的特定部分,在其中进行Angular操作,并且在其中声明为$rootScope或$scope的变量可用。https://github.com/angular/angular.js/wiki/Understanding-Scopes
$scope
来保存当前页面的属性。相反,我们应该使用controllerAs with vm
方法,其中视图将绑定到控制器对象本身。然后在使用controllerAs语法时,使用一个捕获变量来代替this。选择一个一致的变量名,例如vm,表示ViewModel。$scope
来进行观察。