如何手动编译模板两次或更多次

时间:2013-05-23 19:27:54

标签: angularjs hyperlink compilation directive

我想先编译一个angular指令来追加属性,然后再将其编译为其他指令。反正我是否可以使用compile:pre post或者编译这个

属性追加 至 指示 至 家长指令模板?

1 个答案:

答案 0 :(得分:6)

假设你有一个指令<foo></foo>restrict: 'E')。您想要动态添加属性(〜修改原始DOM,而不是模板),这应该在指令的$compile步骤中完成。添加属性后,要使angularjs实现是否有任何可以触发的新指令,您必须编译新元素。例如,这就是ng-include的作用。它包含DOM中的元素并编译它们,因此可以使用新的指令。

指令foo

compile: function ($tElement, $tAttrs) {
  var el = $tElement[0];
  el.setAttribute('bar', 'newFancyValue');
  return function (scope, element, attrs) {
     // you can even append html elements here, for example the template
     element.append("<book></book>");
     $compile(element)(scope);
  };
}

和指令bar(带restrict: 'A')可以包含您想要的任何代码。

这是您可能还想阅读的相关问题A general directive with a specific type (UI components inheritance)

查看文档中的transclude函数,了解如何在foo

中添加book的先前内部元素