AngularJs:不同页面上的同一个控制器是否共享范围?

时间:2015-08-21 11:09:02

标签: angularjs

我是学习Angularjs的新手,有点困惑。我想问一下,如果相同的控制器在不同的页面绑定,那些页面是否共享相同的范围变量,或者它们有自己的隔离范围?请记住,两个页面都使用相同的控制器。

2 个答案:

答案 0 :(得分:7)

来自文档:

  

当Controller通过ng-controller连接到DOM时   指令,Angular将使用。实例化一个新的Controller对象   指定Controller的构造函数。一个新的子范围将是   创建并作为注入参数提供给   Controller的构造函数作为$ scope。

所以1)它不是同一个控制器,它们是相同构造函数的两个实例(a.k.a类)和2)新范围是作为范围控制器的子连接而创建的。

文档中的另一点:

  

范围按层次结构排列,模仿DOM   申请结构。

因此两个独立的DOM元素不能具有相同的范围 - 它会严重影响Angular结构。每个控制器只能访问它所附加的元素范围。

如果您因为一个范围在更改另一个范围时更新而感到痛苦,请尽可能发布您的代码"意外关闭"在您的控制器定义中。

答案 1 :(得分:0)

  

我想问一下,如果同一个控制器绑定在不同的页面,这些页面是否共享相同的范围变量,或者它们有自己的隔离范围?请记住,两个页面都使用相同的控制器。

是的,我在这里回应其他人的想法。如果您对任意数量的页面使用相同的控制器,则每个页面的范围将保持不变。除非没有更改范围,否则该值将保持与初始化期间的值相同。

例如。您的控制器如下

myApp.controller('FirstCtrl', function( $scope){
    $scope.myVar = 'this is my scope';
});

如果您对两个页面使用相同的控制器,那么第一页和第二页将具有相同的myVar值。因此,在一页中的html下面

  <div ng-model="myVar"></div> 

以及第二页中的html

  <span ng-model="myVar"></span> 

将显示为

  <div ng-model="myVar">this is my scope</div>

  <span ng-model="myVar">this is my scope</span>

分别。

鉴于此,我想补充说,也可以使用$ emit,$ broadcast和$ on在不同的控制器之间共享$ scope。 在http://www.dotnet-tricks.com/Tutorial/angularjs/HM0L291214-Understanding- $ emit, - $ broadcast-and- $ on-in-AngularJS.html了解更多相关信息

希望这有帮助。