我已經知道transclusion是如何工作的(僅在第一級我猜),但我有一個關於嵌套transcluded項目的範圍的問題。嵌套 - 透明物品 - 範圍澄清?
好了,所以我有這樣的代碼:
<body ng-app="docsTabsExample" ng-controller="ctrl">
<my-tabs>
<my-pane title="Hello">
<h4>Hello , The value of "i" is => {{i}}</h4>
</my-pane>
</my-tabs>
</body>
基本上我有一個controller
,<my-tabs>
和<my-pane >
。在myTabs
指令
展望:
.directive('myTabs', function()
{
return {
restrict: 'E',
transclude: true,
scope:
{},
controller: ['$scope', function($scope)
{
$scope.i = 2;
}],
template: '<div ng-transclude></div>'
};
})
我知道指令的內容將有機會獲得外指令的範圍
所以黃色部分將有機會獲得外範圍(這是主控制器範圍):
這裏是myPane
指令代碼:
.controller('ctrl', function($scope)
{
$scope.i = 1000;
})
程序的輸出是:
.directive('myPane', function()
{
return {
require: '^myTabs',
restrict: 'E',
transclude: true,
scope:
{
},
controller: function($scope)
{
$scope.i = 4; //different value
},
template: '<div ng-transclude></div>'
};
})
該程序將啓動
你好,的「我的價值「is => 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
?
編輯從OP的答案後
安裝和配置潛望鏡(從@MarkRajcok)後,現在我可以看到它在視覺上:
兩個MYTAB和myPane有'transclude:TRUE'。 myPane嵌套在myTab中。你給myPane myTab的範圍,然後myTab是ctrl的範圍,這給了myPane ctrl的範圍。 – jperezov