Angularjs 如何手动编译模板两次或两次以上

Angularjs 如何手动编译模板两次或两次以上,angularjs,hyperlink,compilation,directive,Angularjs,Hyperlink,Compilation,Directive,我想先编译一个angular指令来附加属性,然后再编译代码作为其他指令。我是否可以使用compile:pre-post或其他方法来编译这个 属性附加 到 指示 到 父指令模板?假设您有一个指令(限制:'E')。您希望动态添加属性(~修改原始DOM,而不是模板),这应该在指令的$compile步骤中完成。添加属性后,为了让angularjs意识到是否有任何新的指令可以触发,您必须编译新元素。例如,ng include就是这样做的。它在DOM中包含元素并对其进行编译,以便可以使用新的指令 指令foo

我想先编译一个angular指令来附加属性,然后再编译代码作为其他指令。我是否可以使用compile:pre-post或其他方法来编译这个

属性附加 到 指示 到
父指令模板?

假设您有一个指令
限制:'E'
)。您希望动态添加属性(~修改原始DOM,而不是模板),这应该在指令的
$compile
步骤中完成。添加属性后,为了让angularjs意识到是否有任何新的指令可以触发,您必须编译新元素。例如,ng include就是这样做的。它在DOM中包含元素并对其进行编译,以便可以使用新的指令

指令
foo

compile:function($tElement,$tAttrs){
var el=$tElement[0];
el.setAttribute('bar','newFancyValue');
返回函数(范围、元素、属性){
//您甚至可以在此处附加html元素,例如模板
元素。追加(“”);
$compile(元素)(范围);
};
}
指令
bar
(带有
restrict:'A'
)可以有您想要的任何代码

这是一个相关的问题,你可能也想读一下


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

中添加
foo
之前的内部元素,如果您的“foo”指令是restrict“A”,该怎么办?在这种情况下,编译似乎会永远循环..是的,可能是因为编译之后,angular会再次找到触发指令的属性,这使得它一次又一次地编译它。我想您可以删除compile函数中的属性,并仅在该属性存在时返回link函数。类似的问题:为什么编译
$tElement
的第一个参数是数组而不是元素,因此需要
var el=$tElement[0]。大多数示例将其视为单个对象,但与OP一样,我得到了一个数组。