私はすでにトランジションが(私が推測している最初のレベルの中で)どのように動作するのか知っていますが、私はネストされたトランジエントのアイテムのスコープについて質問しています。入れ子にされたアイテム - 範囲の明確化?
[OK]をので、私はこのコードを持っている:
<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>'
};
})
スコープ(メインコントローラスコープ):
012ここでmyPane
ディレクティブのコードです:
.directive('myPane', function()
{
return {
require: '^myTabs',
restrict: 'E',
transclude: true,
scope:
{
},
controller: function($scope)
{
$scope.i = 4; //different value
},
template: '<div ng-transclude></div>'
};
})
プログラムが始まります:
.controller('ctrl', function($scope)
{
$scope.i = 1000;
})
プログラムの出力は次のとおりです。
こんにちは、私」の値"is => 1000
しかし、ドキュメントによると
:myPane's
トランスクルードデータは値i=2
を持つmyTabs
ディレクティブですディレクティブの外側のスコープへのアクセス権を持っている必要があります。それはががmyTabs
からスコープを継承しないように
しかしmyPane
は孤立スコープを持っています。
質問
は、だから、i=1000
を取得するために、コントローラの範囲にあるレベルより高くなるん? (明確化、私はどのようにしてi
が別の値を得ることができるか質問していません - それはなぜ1000の値を持っているかを尋ねています)。
ここで、スコープの階層はどのように見えるのですか?
このような感じですか?
controller's scope
|
+--------+---------+
| |
myTabs's mypanes's
transcluded transcluded
data's scope data's scope
ドキュメントは言う:
transcludeオプションは、スコープがネストされている方法を変更します。それは になります。その結果、内部にあるスコープではなく、の外側にある のスコープは、となります。 では、コンテンツを外部スコープにアクセスします。
myPAne
ディレクティブの外側にはどのような範囲がありますか?
つまり、理由は/ です。はi=1000
ですか? ANSWER AFTER OP FROM
EDIT
(@MarkRajcokから)をインストールし、潜望鏡を設定した後、私は今、視覚的にそれを見ることができます。上のドキュメントから
MyタブとmyPaneの両方が 'transclude持っている:true'を。 myPaneはmyTab内にネストされています。 myPaneにmyTabのスコープを与えてから、myTabにctrlのスコープを与えて、myPaneにctrlのスコープを与えます。 – jperezov