【发布时间】:2013-07-22 13:00:24
【问题描述】:
给定一个带有 transclude 和隔离范围的指令 (container1),当该指令被链接时,我就有了这些范围:
Scope 004 <-- scope of the body
Scope 005 <-- scope of directive container1
Scope 006 <-- scope of the ng-transclude
我预计:
Scope 004 <-- scope of the body
Scope 005 <-- scope of the directive
Scope 006 <-- scope of the ng-transclude
如果同一指令具有共享范围而不是隔离范围,我会得到预期的结果。
这给我带来了一个问题,因为如果转入的内容包含另一个具有隔离范围的指令 (component1),我会得到:
Scope 004 <-- scope of the body
Scope 005 <-- scope of the directive
Scope 006 <-- scope of the ng-transclude
Scope 007 <-- scope of directive component1
我想使用这样的指令:
<container1>
<component1 data="objectExposedInContainer1"/>
</container1>
但这不起作用,在component1 内部,$scope.data 是undefined,因为objectExposedInContainer1 不在正确的范围内。
我有两个问题:
- 如果指令具有独立作用域,为什么
ng-transclude的作用域不是其指令作用域的子作用域?这是一个错误吗? - 如果不是错误,如果不是像我尝试的那样设置属性,容器指令如何将数据传递给它的内容。
这是一个不起作用的示例:http://plnkr.co/edit/NDmJiRzTF9e5gw8Buht2?p=preview。因为 Plunker 是使用 Anguar 构建的,所以很难使用 Batarang 进行调试。我建议在本地下载代码。注释掉 app.js 的 line 10 以使其使用共享范围。
【问题讨论】:
-
1) 不,你得到了你想要的——指令的范围是孤立的。 2) 使用共享控制器。
-
@Joe Gauterin,看看这个新样本:plnkr.co/edit/Bv7B4OokkLi8bIctCIl3。这里,
container1包含component1,但没有使用ng-transclude。这一次,即使两者都有独立的作用域,它们的作用域也具有正确的父/子关系。ng-transclude的存在会改变结果。
标签: angularjs