我正在编写一个具有transclude:"element"
属性并且执行类似ng-repeat
指令的指令。现在我有另一个指令正在使用这个。我需要在子模板完成编译时收到通知,这样我才能获得编译的内容而不是模板。
这是一个示例代码,展示了它的工作原理
<ul directive-A>
<li my-repeat-directive-b="option in options">
<a>
<span>{{option.name}}</span>
</a>
</li>
</ul>
当my-repeat-directive-b
完成其转换和链接功能时。我可以获得<li>
的列表,但其子元素仍然是模板。我想知道是否有任何方法让我知道孩子们何时完成编译。
答案 0 :(得分:2)
如果您想要渲染内容,请使用$ timeout。 ng-repeat的渲染仅在渲染阶段之后可用:
<强>指令-A:强>
link: function(scope, element, attr) {
$timeout(function() {
// access rendered li here
var lis = element.find('li');
...
});
});
答案 1 :(得分:1)
您在postLink
函数中放置的任何内容都将在元素完全编译和链接后执行,包括其子元素。
您可以在docs或SO上的许多现有答案中了解此过程。
通常,链接函数由您定义并从compile
函数返回:
compile: function compile(tElement, tAttrs, transclude) {
return {
pre: function preLink(scope, iElement, iAttrs, controller) { ... },
post: function postLink(scope, iElement, iAttrs, controller) { ... }
}
}