我是角色的初学者。我经历了角度路由教程,我对以下代码有疑问,似乎另一个控制器的$ scope被另一个控制器访问。据我所知,我们无法访问$ scope,一个控制器的数据无法被另一个控制器访问。有人可以解释这种情况吗?并且代码在这里工作正常。
HttpClient
答案 0 :(得分:3)
Angular $scope
就像一棵树,树干是$rootScope
,其他$scope
分支来自那个$scope
,所以自viewController
以来}是directoryController
的孩子,你可以访问其中的变量。
$rootScope -> directoryController -> viewController
viewController
可以访问所有父$scope
,directoryController
可以访问$rootScope
,而$rootScope
只能访问自己。
答案 1 :(得分:0)
原始范围内原型固有的范围。
执行摘要:
在AngularJS中,子范围通常原型继承自其父范围。此规则的一个例外是使用
scope: { ... }
的指令 - 这会创建一个" isolate"没有原型继承的范围。(和带有翻译的指令)这个结构通常用于创建一个"可重用的组件"指示。在指令中,默认情况下直接使用父作用域,这意味着您在指令中更改的来自父作用域的任何内容也将在父作用域中更改。如果设置scope:true
(而不是scope: { ... }
),那么原型继承将用于该指令。
- AngularJS Wiki -- Understanding Scopes
范围层次结构
每个Angular应用程序只有一个根作用域,但可能有多个子作用域。
应用程序可以有多个范围,因为某些指令会创建新的子范围(请参阅指令文档以查看哪些指令创建新范围)。创建新范围时,它们将作为其父范围的子项添加。这会创建一个树形结构,与它们所附着的DOM平行。
当Angular评估
{{name}}
时,它首先查看与name属性的给定元素关联的范围。如果未找到此类属性,则会搜索父作用域,依此类推,直到达到根作用域。在JavaScript中,此行为称为原型继承,子范围原型继承自其父级。