如何在指令的子代编译时得到通知?

时间:2014-10-15 12:55:45

标签: angularjs

我正在编写一个具有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>的列表,但其子元素仍然是模板。我想知道是否有任何方法让我知道孩子们何时完成编译。

2 个答案:

答案 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) { ... }
      }
}