指令内部指令链接功能同步

时间:2016-08-17 08:07:37

标签: angularjs

我有一个在链接函数中操作Dom的指令。在其中另一个指令,我需要在父指令完成其Dom操作后触发其链接函数。例如,我在父链接函数中为作用域分配了属性,但是在子指令中,作用域没有这些属性(作用域不是隔离的,我需要修改链接函数中的作用域,以便我可以访问元件)

2 个答案:

答案 0 :(得分:1)

对于指令,link(与post-link)函数的执行顺序相反。这意味着对于以下情况:
<span l1-dir><span l2-dir></span></span>
首先调用child指令的link函数,然后调用父指令链接。我们很幸运,因为我们还有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 
            }
        }  

这确保了在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的所有绑定都将完成。