【发布时间】:2017-07-26 23:56:13
【问题描述】:
通过 Shadow DOM (v1) 示例in this tutorial,它定义了一个 Web 组件(选项卡),其中每个选项卡对应一个命名和默认插槽:
<fancy-tabs>
<button slot="title">Title</button>
<button slot="title" selected>Title 2</button>
<button slot="title">Title 3</button>
<section>content panel 1</section>
<section>content panel 2</section>
<section>content panel 3</section>
</fancy-tabs>
它会渲染成这样:
<fancy-tabs>
#shadow-root
<div id="tabs">
<slot id="tabsSlot" name="title">
<button slot="title">Title</button>
<button slot="title" selected>Title 2</button>
<button slot="title">Title 3</button>
</slot>
</div>
<div id="panels">
<slot id="panelsSlot">
<section>content panel 1</section>
<section>content panel 2</section>
<section>content panel 3</section>
</slot>
</div>
</fancy-tabs>
为了保留现有的 API,我想创建一个与此类似的组件,但我可以将每个选项卡创建为自己的自定义元素。所以一个看起来像这样的 API:
<fancy-tabs>
<fancy-tab>
<button slot="title">Title</button>
<section>content panel 1</section>
</fancy-tab>
<fancy-tab>
<button slot="title" selected>Title 2</button>
<section>content panel 2</section>
<fancy-tab>
<fancy-tab>
<button slot="title" selected>Title 3</button>
<section>content panel 3</section>
<fancy-tab>
</fancy-tabs>
但是让它渲染到与上面类似的 Shadow DOM。
换句话说,我想要的是像<fancy-tab> 这样的中间元素,同时仍然控制它下面的槽元素。我尝试将 <fancy-tab> 创建为具有开放 shadowRoot 的 CE,作为没有 shadowRoot 的 CE,并且根本不将其定义为自定义元素。
有没有办法做到这一点?或者槽必须位于 Light DOM 的第一个子节点?
【问题讨论】: