0

私は、入れ子にされたディレクティブをtransclusionと^ requireで正しく使用する方法を理解しようとしています。私はoutterディレクティブにネストされた子ディレクティブによって更新される変数を持たせたいが、すべての子をその変数にリンクさせたい。私は問題^require-access親スコープを持つ角ディレクティブ?

にJSを証明するのは非常に簡単な例を書かれている

(function() { 
    'use strict'; 

    angular 
     .module('app') 
     .directive('test', test); 

    function test() { 
     var directive = { 
      bindToController: true, 
      controller: testController, 
      'controllerAs': 'testController', 
      scope: {}, 
      templateUrl: 'scripts/test/test.html', 
      transclude: true 
     }; 
     return directive; 
    } 

    function testController() { 
     var self = this; 
     self.childCount = 0; 

     self.addChild = function addChild(child) { 
      self.childCount++; 
      child.childNumber = self.childCount; 
     } 
    } 

})(); 


(function() { 
    'use strict'; 

    angular 
     .module('app') 
     .directive('child', child); 

    function child() { 
     var directive = { 
      'scope': {}, 
      'link': link, 
      'templateUrl': 'scripts/test/child.html', 
      'transclude': true, 
      'require': '^test' 
     }; 
     return directive; 

     function link(scope, element, attrs, testController) { 
      scope.childNumber = null; 
      testController.addChild(scope); 
     } 

    } 

})(); 

メインHTMLは部分的

<test> 
    <child></child> 
    <child></child> 
    <child></child> 
</test> 

test.htmlという

<h1>self.childCount = {{testController.childCount}}</h1> 
<div ng-transclude></div> 
呼び出します

のchild.html部分

<h3>I am child {{childNumber}} out of {{testController.childCount}}</h3> 

出力(および問題)

self.childCount = 3 
I am child 1 out of 
I am child 2 out of 
I am child 3 out of 

あなたが見ることができるように、のchild.html出力がどのように出力{{testController.childCountに把握していません}}。何が間違っているのかについてのアイデア?

答えて

0

私は通常controllerAsという構文を使用しませんが、おそらく'scope': {}を子スコープから削除してみてください。隔離スコープを作成すると、子ディレクティブは親コントローラスコープにアクセスできなくなる可能性があります。

+0

私はあなたがスティーブを意味しているのを見ますが、子ディレクティブに分離スコープを持たせようとしているので、それらは "Xのうちの子1"と "Xのうちの子2"であることがわかります。隔離されたスコープがない場合、その最初の変数(私の例ではchildNumberと呼ばれています)が親スコープにアタッチされるので、それらのすべてが "私は3のうち3番目の子です" – mls3590712

+0

My childNumberフィールドは、プロトタイプ的に継承する子スコープのメンバであるため、子スコープで宣言されている限り、各子スコープは独自のchildNumberフィールドを持つと考えました。私は間違っているかもしれません。 –