我有一个指令,在连接函数中操纵Dom。在它内部的另一个指令,我需要它的链接功能,在父指令完成其Dom操作后触发。例如,我将属性赋给了父链接函数中的作用域,但是在子指令中作用域没有这些属性(作用域不是孤立的,我需要修改链接函数中的作用域,以便访问该元素)指令中的指令链接函数同步
0
A
回答
1
对于指令,link
(与post-link
相同)的执行顺序相反。这意味着对于以下情况:
<span l1-dir><span l2-dir></span></span>
首先调用子指令的链接函数,然后调用父指令链接。我们很幸运,因为我们也有pre-link
函数,它按照指令定义的顺序调用。
在我们的例子中,第一个指令的pre-link
函数被调用,然后是第二个函数的pre-link
函数。
您可以在pre-link
功能从父指令移动DOM操作逻辑(先分成pre
和post
):
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在你的“家长”指令添加到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将比较勒特。
这适用于我。谢谢。 –