【发布时间】:2019-12-22 07:19:13
【问题描述】:
如果我手动将template 节点写入 HTML,我可以在我的自定义元素中使用它。如果我创建一个 template 节点并在尝试使用它时使用 javascript 将其附加到 HTML 中,它是空的...
在下面的示例中,我将 template-a 设为常规 HTML 方式,并使用 javascript 将 template-b 设为相同的形状。我定义了一个使用两个模板的非常简单的自定义元素。只有template-a 可见。
const sandbox = document.getElementById('sandbox')
const slot = document.createElement('slot')
slot.setAttribute('name', 'b')
slot.append('slot content goes here')
const em = document.createElement('em')
em.append(slot, '?')
const createdTemplate = document.createElement('template')
createdTemplate.setAttribute('id', 'template-b')
createdTemplate.append(em)
sandbox.append(createdTemplate)
customElements.define('test-element', class extends HTMLElement {
constructor () {
super()
this.attachShadow({ mode: 'open' }).append(
...['template-a','template-b']
.map(id =>
document.getElementById(id).content.cloneNode(true)
)
)
}
})
<div id="sandbox">
<template id="template-a">
<strong><slot name="a">slot content goes here</slot>!</strong>
</template>
<test-element>
<span slot="a">some a slot content</span>
<span slot="b">some b slot content</span>
</test-element>
</div>
【问题讨论】:
-
嗯,这很尴尬......我在发布这个之前搜索了一天,是的,有一个现有的答案,这正是我想要的