我已经知道transclusion是如何工作的(仅在第一级我猜),我对嵌套的transcluded项的范围有疑问.
好的,我有这个代码:
Hello , The value of "i" is => {{i}}
基本上我有一个controller
,
和
.
看myTabs
指令:
.directive('myTabs', function() { return { restrict: 'E', transclude: true, scope: {}, controller: ['$scope', function($scope) { $scope.i = 2; }], template: '' }; })
我知道该指令的内容可以访问外部指令的范围
因此黄色部分将可以访问外部作用域(这是主控制器作用域):
这是myPane
指令的代码:
.directive('myPane', function() { return { require: '^myTabs', restrict: 'E', transclude: true, scope: { }, controller: function($scope) { $scope.i = 4; //different value }, template: '' }; })
该计划始于:
.controller('ctrl', function($scope) { $scope.i = 1000; })
该计划的输出是:
您好,"i"的值=> 1000
但
根据文档:myPane's
transcluded数据应该可以访问指令的外部范围,该指令是myTabs
具有该值的指令i=2
.
但是myPane
有一个隔离的范围,以便它不是继承的范围myTabs
.
题
所以,做它去一个水平更加高到控制器的范围,以获得i=1000
?(澄清,我不是在问我怎样才能i
获得另一个价值 - 我在问为什么/它如何具有1000的价值).
我的意思是范围的层次结构在这里看起来如何?
是这样的吗?
controller's scope | +--------+---------+ | | myTabs's mypanes's transcluded transcluded data's scope data's scope
文档说:
transclude选项更改范围嵌套的方式.它使得transcluded指令的内容具有指令之外的任何范围,而不是内部的任何范围.这样做,它使内容访问外部范围.
但是myPAne
指令的范围有多大?
换句话说,为什么/ 怎么样呢i=1000
?
完整的PLUNKER
在回答后编辑OP
安装和配置PeriScope后(来自@MarkRajcok)我现在可以直观地看到它: