考虑以下指令标记:
<!-- 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操作。
答案 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
指令的子元素将会 因为他们在等待他们,所以没有被编译和链接 模板加载异步和自己的编译和链接 已经暂停,直到发生。
这完全是我的理由:我正在从网址加载模板。