给定一个带有 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 进行调试。我建议在本地下载代码。注释掉line 10
以app.js
使其使用共享范围工作。