Jen*_*ell 8 javascript components slots native-web-component
我有一个没有shadow dom 的html web 组件,我尝试添加一个插槽。由于某种原因它不起作用。
我希望它将“Foo bar”切换为“Hello world”,但这并没有发生。
class HelloWorld extends HTMLElement {
constructor() {
super();
}
connectedCallback() {
this.innerHTML = `
<div>
<slot name="element-name">Foo Bar</slot>
</div>
`;
}
}
customElements.define("hello-world", HelloWorld);Run Code Online (Sandbox Code Playgroud)
<hello-world>
<span slot="element-name">Hello World</span>
</hello-world>Run Code Online (Sandbox Code Playgroud)
Dan*_*man 11
是的,<slot>仅适用于本机 (JSWC) Web 组件中的 ShadowDOM
或原生 HTML 元素(您可以附加 ShadowDOM)
开槽内容是反射 lightDOM内容
请参阅::: slotted CSS 选择器,用于 ShadowDOM 插槽中的嵌套子级
没有shadowDOM的Web组件只有innerHTML
如果您this.innerHTML=在这样的 Web 组件上执行此操作,它将替换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 = `<slot></slot><slot name="title">Foo Bar</slot>`;
this.onclick = (evt) => this.querySelector('b').slot = "title";
}
});
</script>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3835 次 |
| 最近记录: |