2016-08-17 59 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将比较勒特。