来自关于指令的 AngularJS 文档:
transclude
- 编译元素的内容并使其可用于指令。通常与 ngTransclude 一起使用。嵌入的优点是链接函数接收一个预先绑定到正确范围的嵌入函数。在典型的设置中,小部件创建了一个隔离范围,但嵌入不是子范围,而是隔离范围的兄弟。这使得小部件可以拥有私有状态,并且嵌入可以绑定到父(预隔离)范围。
true
- 嵌入指令的内容。
'element'
- 嵌入整个元素,包括以较低优先级定义的任何指令。
嵌入:真
因此,假设您有一个名为my-transclude-true
声明的指令transclude: true
,如下所示:
<div>
<my-transclude-true>
<span>{{ something }}</span>
{{ otherThing }}
</my-transclude-true>
</div>
编译后和链接之前,这变成:
<div>
<my-transclude-true>
<!-- transcluded -->
</my-transclude-true>
</div>
其中 , 的内容(子项)my-transclude-true
被<span>{{ something }}</span> {{...
嵌入并可用于指令。
嵌入:'元素'
如果您有一个名为my-transclude-element
声明的指令transclude: 'element'
,如下所示:
<div>
<my-transclude-element>
<span>{{ something }}</span>
{{ otherThing }}
</my-transclude-element>
</div>
编译后和链接之前,这变成:
<div>
<!-- transcluded -->
</div>
在这里,包括其子元素在内的整个元素都被嵌入并可供指令使用。
链接后会发生什么?
这取决于您的指令来执行它需要对 transclude 函数执行的操作。ngRepeat
使用transclude: 'element'
,以便它可以在范围更改时重复整个元素及其子元素。但是,如果您只需要替换标签并希望保留其内容,则可以使用为您执行此操作transclude: true
的指令。ngTransclude