我是学习Angularjs的新手,有点困惑。我想问一下,如果相同的控制器在不同的页面绑定,那些页面是否共享相同的范围变量,或者它们有自己的隔离范围?请记住,两个页面都使用相同的控制器。
答案 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了解更多相关信息
希望这有帮助。