在没有阴影 dom 的 html 网络组件上插槽不起作用
Slots does not work on a html web component without shadow dom
我有一个 html 没有阴影的 Web 组件 dom,我尝试添加一个插槽。由于某种原因,它不起作用。
我原以为它会将“Foo bar”切换为“Hello world”,但这并没有发生。
- 插槽是否仅适用于阴影 dom 和模板?
- 我怎样才能让它工作?
class HelloWorld extends HTMLElement {
constructor() {
super();
}
connectedCallback() {
this.innerHTML = `
<div>
<slot name="element-name">Foo Bar</slot>
</div>
`;
}
}
customElements.define("hello-world", HelloWorld);
<hello-world>
<span slot="element-name">Hello World</span>
</hello-world>
是的,<slot>
仅适用于 shadowDOM
插槽内容是 反映 lightDOM 内容
参见:
一个Web组件没有 shadowDOM只有innerHTML
如果您在此类 Web 组件上执行 this.innerHTML=
,它 将替换 innerHTML
,就像在任何其他 HTML 标签上一样
与 shadowDOM:
<hello-world>
<b slot="none">Mighty</b>
<span slot="title">Web Components</span>
Hello!
</hello-world>
<script>
customElements.define("hello-world", class extends HTMLElement {
constructor() {
super()
.attachShadow({mode:"open"})
.innerHTML = `<div><slot></slot><slot name="title">Foo Bar</slot></div>`;
this.onclick = (evt) => {
this.querySelector('b').slot="title";
};
}
});
</script>
我有一个 html 没有阴影的 Web 组件 dom,我尝试添加一个插槽。由于某种原因,它不起作用。
我原以为它会将“Foo bar”切换为“Hello world”,但这并没有发生。
- 插槽是否仅适用于阴影 dom 和模板?
- 我怎样才能让它工作?
class HelloWorld extends HTMLElement {
constructor() {
super();
}
connectedCallback() {
this.innerHTML = `
<div>
<slot name="element-name">Foo Bar</slot>
</div>
`;
}
}
customElements.define("hello-world", HelloWorld);
<hello-world>
<span slot="element-name">Hello World</span>
</hello-world>
是的,<slot>
仅适用于 shadowDOM
插槽内容是 反映 lightDOM 内容
参见:
一个Web组件没有 shadowDOM只有innerHTML
如果您在此类 Web 组件上执行 this.innerHTML=
,它 将替换 innerHTML
,就像在任何其他 HTML 标签上一样
与 shadowDOM:
<hello-world>
<b slot="none">Mighty</b>
<span slot="title">Web Components</span>
Hello!
</hello-world>
<script>
customElements.define("hello-world", class extends HTMLElement {
constructor() {
super()
.attachShadow({mode:"open"})
.innerHTML = `<div><slot></slot><slot name="title">Foo Bar</slot></div>`;
this.onclick = (evt) => {
this.querySelector('b').slot="title";
};
}
});
</script>