嵌套/转换指令编译和链接时执行某些操作

时间:2016-05-20 10:55:48

标签: javascript angularjs angularjs-directive angularjs-ng-transclude

考虑以下指令标记:

<!-- Directive A -->
<directive-a>
</directive-a>

<-- Directive B -->
<directive-b>
   <directive-a>
        <transclusion1></transclusion1>
   </directive-a>
</directive-b>

我需要在<directive-a>已经编译+ <directive-b>链接后执行一些DOM操作。

当我在link(或<directive-b>函数)上提供compile函数时,<directive-a>仍然没有其被转换的内容。

一旦<directive-a>已经编译+链接,我无法弄清楚如何执行DOM操作。

1 个答案:

答案 0 :(得分:0)

最后,当我开始实施解决方案时,解决方案比我想象的更容易。

让我们说<directive-a>有以下选项:

{
    scope: {
        "postLink": "&"
    }
}

...并且,作为controller()函数的一部分,我做了:

{
    controller: () => {
        // Angular 1.5.3+
        this.$postLink = $scope.postLink;
    },
    scope: {
        "postLink": "&"
    }
}

现在我可以挂钩<directive-a> $postLink钩子:

<-- Directive B -->
<directive-b>
   <directive-a post-link="model.directiveAPostLink()">
        <transclusion1></transclusion1>
   </directive-a>
</directive-b>

调用整个model.directiveAPostLink()函数时,<directive-a>已经编译并链接了!

更多细节

检查Angular GitHub的存储库提交历史记录I've found the following description:

  

$postLink - 在此控制器的元素及其子元素之后调用   已被联系。类似于post-link函数,这个钩子可以   用于设置DOM事件处理程序并执行直接DOM操作。

     

请注意,包含templateUrl指令的子元素将会   因为他们在等待他们,所以没有被编译和链接   模板加载异步和自己的编译和链接   已经暂停,直到发生。

这完全是我的理由:我正在从网址加载模板。