2016-08-17 11 views
0

私は、リンク関数内でDomを操作するディレクティブを持っています。親ディレクティブがDom操作を終了した後にリンク関数を起動する必要があるという別の指示があります。たとえば、親リンク関数のスコープにプロパティを割り当てましたが、子ディレクティブでスコープにこれらのプロパティがありません(スコープが分離されていないため、リンク関数のスコープを変更して要素にアクセスできるようにする必要があります)ディレクティブリンク関数内のディレクティブ

答えて

1

ディレクティブの場合、linkpost-linkと同じ)機能の実行順序が逆になります。これは、次のシナリオでは、
<span l1-dir><span l2-dir></span></span>
子指示のリンク機能が最初に呼び出され、親指示リンクが呼び出されることを意味します。 pre-linkの関数があり、ディレクティブ定義の順番で呼び出されているので、私たちは幸いです。
最初の指令のpre-link関数が呼び出され、次に2番目の指令のpre-link関数が呼び出されます。
あなたがpre-link機能(最初prepostに分割)で親ディレクティブからDOM操作ロジックを移動することができます。これは、子供のpost-link一部であなたのDOM操作が親からの指示ことを保証

return { 
     restrict: 'A', 
     compile: function compile(tElement, tAttrs, transclude) { 
      return { 
       pre: function preLink(scope, iElement, iAttrs, controller) { //parent directive logic for DOM manipulation 
       }, 
       post: //nothing 
      } 
     } 

指令が完了します。

+0

これは私のために働く。ありがとうございました。 –

0

単にあなたの子供ディレクティブにNG-IFを追加し、このように、あなたの「親」ディレクティブで0で$タイムアウトの完了後にtrueに設定します、あなたがこの方法を

/*above should be placed all your parent directive link function code... the $timeout should be 
executed after your parent directive code*/ 
$timeout(function(){ 
    showChildDirective = "true"; 
}, 0); 

親ディレクティブのすべてのタスクを実行します($タイムアウトはリンク関数の最後に置かれます)。次の$ダイジェストサイクルが完了するまで待つことができます。 DOMへのすべてのバインディングは〜になるlete。

関連する問題