2015-12-08 6 views
6

私はすでにトランジションが(私が推測している最初のレベルの中で)どのように動作するのか知っていますが、私はネストされたトランジエントのアイテムのスコープについて質問しています。入れ子にされたアイテム - 範囲の明確化?

[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>' 
     }; 
    }) 

スコープ(メインコントローラスコープ):

enter image description here

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

FULL PLUNKER

EDIT

(@MarkRajcokから)をインストールし、潜望鏡を設定した後、私は今、視覚的にそれを見ることができます。上のドキュメントから

enter image description here

+2

MyタブとmyPaneの両方が 'transclude持っている:true'を。 myPaneはmyTab内にネストされています。 myPaneにmyTabのスコープを与えてから、myTabにctrlのスコープを与えて、myPaneにctrlのスコープを与えます。 – jperezov

答えて

関連する問題