Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJs:不同页面上的同一控制器是否共享作用域?_Angularjs - Fatal编程技术网

AngularJs:不同页面上的同一控制器是否共享作用域?

AngularJs:不同页面上的同一控制器是否共享作用域?,angularjs,Angularjs,我刚开始学习Angularjs,有点困惑。我想问,如果同一个控制器绑定在不同的页面上,那么这些页面是否共享相同的范围变量,或者它们有自己的独立范围?请记住,这两个页面使用的是同一个控制器。来自文档: 当控制器通过ng控制器连接到DOM时 指令,Angular将使用 指定控制器的构造函数。将创建一个新的子作用域 创建并作为可注入参数提供给 控制器的构造函数函数为$scope 因此,1)它不是同一个控制器,这是同一构造函数(也称为类)的两个实例;2)当范围控制器的子对象附加到时,会创建新的范围 文件

我刚开始学习Angularjs,有点困惑。我想问,如果同一个控制器绑定在不同的页面上,那么这些页面是否共享相同的范围变量,或者它们有自己的独立范围?请记住,这两个页面使用的是同一个控制器。

来自文档:

当控制器通过ng控制器连接到DOM时 指令,Angular将使用 指定控制器的构造函数。将创建一个新的子作用域 创建并作为可注入参数提供给 控制器的构造函数函数为$scope

因此,1)它不是同一个控制器,这是同一构造函数(也称为类)的两个实例;2)当范围控制器的子对象附加到时,会创建新的范围

文件中的另一点:

作用域以模仿DOM的层次结构排列 应用程序的结构

因此,两个单独的DOM元素不能具有相同的作用域-这将严重影响角度结构。每个控制器只能访问其附加到的元素的范围

如果您因为一个作用域在另一个作用域发生更改时被更新而遭受痛苦,请发布您的代码,因为您可以在控制器定义中使用“意外关闭”

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

是的,我在这里附和别人的想法。如果对任意数量的页面使用相同的控制器,则每个页面的作用域将保持不变。除非不更改范围,否则该值将保持初始化期间的状态

您的控制器如下所示

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>
这是我的工作范围

这是我的工作范围
分别

鉴于此,我想补充一点,使用$emit、$broadcast和$on在不同控制器之间共享$scope也是可能的。 在$emit、-$broadcast和-$on-in-AngularJS.html上阅读更多关于此的信息


希望这有帮助。

是的,因为$scope被注入控制器函数,并且无论您在哪里使用它,它都可以在函数上下文中使用。@Krishna-您确定吗?首先,两个不同的页面如何使用同一个控制器?如果有的话,它们使用给定控制器类的两个不同实例。@BroiSatse-只要它们在客户端的同一URI或页面下呈现,两个页面就可以共享同一个控制器。它将是不同的$scope。即使它是不同页面中的同一个控制器。每个页面都有自己的控制器。我的意思是你的控制器每次都会初始化。@Krishna-你能告诉我怎么做吗?我的意思是如何将一个控制器连接到两个DOM元素?实际上,我在不同的页面上使用同一个控制器,每次在页面之间切换$scope变量时,都会重新初始化,所以我认为每个页面可能有不同的独立$scope,但事实并非如此。我感谢你的帮助。这个选择的答案是错误的。这两个页面都显示“this is my scope”,因为在控制器初始化时,这两个变量都初始化为“this is my scope”。尝试更改$scope.myVar,看看这两个页面是否都更新。您无法获得我的答案<代码>除非不更改范围,否则该值将保持初始化期间的状态。在我的示例中,将共享同一个作用域实例,因为页面将位于同一个隔离的作用域下。如果我显式覆盖作用域,它将根据给定的作用域进行更改。因此,即使两个页面的控制器相同,作用域也不同?
  <span ng-model="myVar">this is my scope</span>