2016-07-29 5 views

答えて

2

実際には、ディレクティブコントローラと「結論」に深く浸ることができます。

親コントローラにアクセスするには、requireオプションを使用できます。

.directive 'parent', -> 
    controller: -> 
    @addHeader = (header) => #do add header 

.directive 'child', -> 
    require: '^parent' 
    link: (scope, el, attr, parent) -> 
    parent.addHeader 'from child' 

しかし、あなたの子リンク機能が実際に実行されていることを確認する必要があります。

たとえば、(WARNING JAVASCRIPT !!! :)はtranscludeオプションを使用できます。 Sophisticated Example。あなたは私の場合には、親コントローラ、 にアクセスすることができます原因私はこのように(オブジェクトにヘッダをプッシュするために、このインスタンスのメソッドを呼び出すので、私は、コントローラ上のオブジェクトのインスタンスを持っている範囲をアクセスもする必要はいけない

.directive('myTable', function() { 
    return { 
     restrict: 'E', 
     controller: function() { 
     var headers = [] 
     this.headers = headers 
     this.addHeader = headers.push.bind(headers) 
     }, 
     template: ` 
     <table> 
      <thead> 
      <tr> 
      </tr> 
      </thead> 
     </table> 
     `, 
     transclude: { 
     // transclude all myHeaders into headers slot 
     headers: 'myHeader' // transclude (how this is a real word at all?) 
     }, 
     link: function(scope, el, attrs, ctrl, transclude) { 
     var headerRow = el.find('thead').children('tr') 

     // append all headers into thead wrapping with th 
     transclude(function(headers) { 
      [].forEach.call(headers, header => { 
      var cell = angular.element('<th></th>') 
      cell.append(header) 
      headerRow.append(cell) 
      }) 
     }, headerRow, 'headers') 

     console.log(ctrl.headers) // headers were populated here 
     } 
    } 
    }) 
    .directive('myHeader', function() { 
    return { 
     restrict: 'E', 
     require: '^myTable', 
     transclude: true, // ohh more transclusions 
     template: '<span ng-transclude></span>', 
     link: function(scope, el, attrs, myTable) { 
     myTable.addHeader(attrs.name) // report to myTable 
     } 
    } 
    }) 

<my-table> 
    <my-header name="First"> First Header </my-header> 
    <my-header name="Second"> Second <span style="color:red;">Header</span> </my-header> 
</my-table> 
+0

多くのThanxs、チャームのように働いた! –

+0

ところで、私はtransclude関数を必要としませんでした。私は親ディレクティブに 'transclude:true'と' 'を追加しました... htmlとcrazyを追加する方法を追加する必要はありませんもの。 thxたくさん! –

0

私が考えることができる唯一の方法は、あなたのリンク機能で要素パラメータを使用することです。 jqLit​​eメソッドを使用すると、ng-tableディレクティブ内にheaderタグを持つすべての要素を取得できます。

私が正しい場合、親スコープから子スコープにアクセスできなかったので、おそらくjqliteを使用することは唯一のオプションです。 AngularJS - Access to child scope

+0

範囲を反映) –

関連する問題