我有一个在链接函数中操作Dom的指令。在其中另一个指令,我需要在父指令完成其Dom操作后触发其链接函数。例如,我在父链接函数中为作用域分配了属性,但是在子指令中,作用域没有这些属性(作用域不是隔离的,我需要修改链接函数中的作用域,以便我可以访问元件)
答案 0 :(得分:1)
对于指令,link
(与post-link
)函数的执行顺序相反。这意味着对于以下情况:
<span l1-dir><span l2-dir></span></span>
首先调用child指令的link函数,然后调用父指令链接。我们很幸运,因为我们还有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
}
}
这确保了在child指令的post-link
部分中,您对父指令的DOM操作将完成。
答案 1 :(得分:0)
只需在你的child指令中添加一个ng-if,并在你的“parent”指令中完成$ timeout为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);
这样,您将执行父指令的所有任务($ timeout将放在链接函数的底部),您将能够等待下一个$摘要周期完成,
所以你对DOM的所有绑定都将完成。