嵌套 HTML 元素未分配给插槽
Nested HTML element not assigning to slot
在下面的代码中,我试图将 <span slot='test-slot'>b</span>
分配给 <slot name='test-slot'>a</slot>
,但分配不起作用。如果我将 <span slot='test-slot'>b</span>
带出其父 <div>
容器,分配确实会按预期进行。
这是为什么?无论如何,您可以使用 slot
元素从嵌套元素进行分配吗?如果没有,还有其他选择吗?这显然是一个简化的测试用例,但在我的真实 Web 组件中,用户在其他容器中添加带有 slot
标签的元素要直观得多。
<test-element>
<div>
<span slot='test-slot'>b</span>
</div>
</test-element>
<template id='template-test-element'>
<slot name='test-slot'>non slotted content</slot>
</template>
<script>
class TestElement extends HTMLElement {
constructor() {
let template = document.getElementById("template-test-element")
.content.cloneNode(true);
// Initialise shadow root and attach table template
super() // sets AND return 'this' scope
.attachShadow({mode:"open"}) // sets AND returns shadowRoot
.append(template);
}
}
customElements.define('test-element', TestElement);
</script>
命名插槽只接受具有匹配 slot
属性的 顶级 子项。
看到这个(旧)Polymer explainer or this more recent article。
编辑:虽然不确定这是从哪里来的,规范没有提到这个要求:https://html.spec.whatwg.org/multipage/dom.html#attr-slot
在下面的代码中,我试图将 <span slot='test-slot'>b</span>
分配给 <slot name='test-slot'>a</slot>
,但分配不起作用。如果我将 <span slot='test-slot'>b</span>
带出其父 <div>
容器,分配确实会按预期进行。
这是为什么?无论如何,您可以使用 slot
元素从嵌套元素进行分配吗?如果没有,还有其他选择吗?这显然是一个简化的测试用例,但在我的真实 Web 组件中,用户在其他容器中添加带有 slot
标签的元素要直观得多。
<test-element>
<div>
<span slot='test-slot'>b</span>
</div>
</test-element>
<template id='template-test-element'>
<slot name='test-slot'>non slotted content</slot>
</template>
<script>
class TestElement extends HTMLElement {
constructor() {
let template = document.getElementById("template-test-element")
.content.cloneNode(true);
// Initialise shadow root and attach table template
super() // sets AND return 'this' scope
.attachShadow({mode:"open"}) // sets AND returns shadowRoot
.append(template);
}
}
customElements.define('test-element', TestElement);
</script>
命名插槽只接受具有匹配 slot
属性的 顶级 子项。
看到这个(旧)Polymer explainer or this more recent article。
编辑:虽然不确定这是从哪里来的,规范没有提到这个要求:https://html.spec.whatwg.org/multipage/dom.html#attr-slot