$ scope和$ rootScope之间的区别

88 javascript angularjs

谁能解释$ scope和$ rootScope之间的区别?

我认为

$范围:

我们可以使用它从特定页面获取特定控制器中的ng-model属性.


$ rootScope

我们可以使用此方法从任何页面获取任何控制器中的所有ng-model属性.


它是否正确?还是其他什么?

Aay*_*ain 85

"$ rootScope"是在网页中创建的所有"$ scope"角度对象的父对象.

在此输入图像描述

使用ng-controller$ rootscope创建$ scope ng-app.

在此输入图像描述


小智 66

主要区别在于为对象分配的属性的可用性.分配的属性$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'];
    }
  ]);
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)


小智 18

根据Angular 开发人员的范围指南:

每个Angular应用程序只有一个根作用域,但可能有多个子作用域.应用程序可以有多个范围,因为某些指令会创建新的子范围(请参阅指令文档以查看哪些指令创建新范围).创建新范围时,它们将作为其父范围的子项添加.这会创建一个树状结构,与它们所连接的DOM平行.

控制器和指令都参考了范围,但没有相互参考.这种安排将控制器与指令以及DOM隔离开来.这是一个重要的观点,因为它使控制器视图不可知,这极大地改善了应用程序的测试故事.


Tom*_*Tom 13

$rootScope无论您使用何种控制器,都可在全球范围内使用,而$scope仅适用于当前控制器及其子控制器.