2016-08-17 28 views
0

我有一個指令,在連接函數中操縱Dom。在它內部的另一個指令,我需要它的鏈接功能,在父指令完成其Dom操作後觸發。例如,我將屬性賦給了父鏈接函數中的作用域,但是在子指令中作用域沒有這些屬性(作用域不是孤立的,我需要修改鏈接函數中的作用域,以便訪問該元素)指令中的指令鏈接函數同步

回答

1

對於指令,link(與post-link相同)的執行順序相反。這意味着對於以下情況:
<span l1-dir><span l2-dir></span></span>
首先調用子指令的鏈接函數,然後調用父指令鏈接。我們很幸運,因爲我們也有pre-link函數,它按照指令定義的順序調用。
在我們的例子中,第一個指令的pre-link函數被調用,然後是第二個函數的pre-link函數。
您可以在pre-link功能從父指令移動DOM操作邏輯(先分成prepost):

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 
      } 
     } 

這保證了孩子的post-link部分從父指示你的DOM操作指令將完成。

+0

這適用於我。謝謝。 –

0

只是一個$超時結束後,以0在你的「家長」指令添加到NG-如果您的孩子的指令,並將其設置爲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); 

這樣,你將執行你的父指令的所有任務($超時將被放置在鏈接函數的底部),並且你將能夠等待下一個$ digest循環完成, 所以你所有的綁定到DOM將比較勒特。

相關問題