想一想下面的指令标记:
<!-- Directive A -->
<directive-a>
</directive-a>
<-- Directive B -->
<directive-b>
<directive-a>
<transclusion1></transclusion1>
</directive-a>
</directive-b>一旦<directive-a>已经是来自<directive-b>的compiled+linked,我需要执行一些DOM操作。
当我在link (或compile函数)上提供一个<directive-a>函数时,<directive-a>仍然没有被屏蔽的内容。
一旦<directive-a>已经是compiled+linked,我就不知道如何执行DOM操作。
发布于 2016-05-20 12:02:44
最后,解决方案比我开始实现解决方案时想象的更容易。
假设有具有以下选项的<directive-a>:
{
scope: {
"postLink": "&"
}
}...and,作为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>已经编译和链接了!
进一步详情
检查角GitHub的存储库提交历史,我找到了以下描述:
在此控制器的元素及其子元素之后调用的
$postLink被链接。类似于后链接函数,这个钩子可以用来设置DOM事件处理程序并直接执行DOM操作。注意,包含templateUrl指令的子元素不会被编译和链接,因为它们正在等待它们的模板异步加载,并且它们自己的编译和链接一直挂起直到出现。
这正是我的情况:我正在从URL中加载模板。
https://stackoverflow.com/questions/37344873
复制相似问题