在编译和链接嵌套/transcluded指令后执行某些操作



考虑以下指令标记:

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

一旦<directive-a>已经编译并从<directive-b>链接,我需要执行一些DOM操作。

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

一旦<directive-a>已经编译并链接,我就不知道如何执行DOM操作。

最后,解决方案比我开始实现解决方案时想象的要容易。

假设<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的存储库提交历史,我发现了以下描述:

$postLink-在此控制器的元素及其子元素之后调用已链接。类似于后链接功能,此挂钩可以用于设置DOM事件处理程序并执行直接DOM操作。

请注意,包含templateUrl指令的子元素将尚未编译和链接,因为他们正在等待异步加载的模板及其自己的编译和链接已经暂停,直到发生这种情况。

这正是我的情况:我从URL加载模板。

最新更新