代码之家  ›  专栏  ›  技术社区  ›  powerbuoy

将模板元素插入插槽元素

  •  1
  • powerbuoy  · 技术社区  · 7 年前

    我构建了一个带有几个命名插槽的自定义元素,如下所示:

    <template>
        <header>
            <slot name="header"></slot>
        </header>
        <slot name="body"></slot>
        <footer>
            <slot name="footer"></slot>
        </footer>
    </template>
    

    我这样使用它:

    <my-custom-element>
        <div slot="header">
            <h1>Title</h1>
            <p>Description</p>
        </div>
        <div slot="body">
            <h2>Body content</h2>
            <p>Body content</p>
            <p>Body content</p>
        </div>
        <div slot="footer">
            <p>Copyright 2018</p>
            <ul>
                <li>Facebook</li>
                <li>Twitter</li>
                <li>Instagram</li>
            </ul>
        </div>
    </my-custom-element>
    

    然而,正如您在我的DOM中看到的那样 header > div > content , footer > div > content

    我想我可以用 template 元素而不是 div 为了摆脱不必要的(有时还会破坏风格) 部门 不幸的是,这似乎不起作用:

    <my-custom-element>
        <template slot="header">
            <h1>Title</h1>
            <p>Description</p>
        </template>
        <template slot="body">
            <h2>Body content</h2>
            <p>Body content</p>
            <p>Body content</p>
        </template>
        <template slot="footer">
            <p>Copyright 2018</p>
            <ul>
                <li>Facebook</li>
                <li>Twitter</li>
                <li>Instagram</li>
            </ul>
        </template>
    </my-custom-element>
    

    有没有一种方法可以将多个元素发送到一个插槽中,而无需先包装它们?

    1 回复  |  直到 7 年前
        1
  •  0
  •   powerbuoy    7 年前

    好的,那么你可以简单地使用 slot 改为多个元素上的属性;

    <my-custom-element>
        <h1 slot="header">Title</h1>
        <p slot="header">Description</p>
        <h2 slot="body">Body content</h2>
        <p slot="body">Body content</p>
        <p slot="body">Body content</p>
        <p slot="footer">Copyright 2018</p>
        <ul slot="footer">
            <li>Facebook</li>
            <li>Twitter</li>
            <li>Instagram</li>
        </ul>
    </my-custom-element>
    

    这是相当不可读和繁琐的虽然。而且感觉不太好的代码。能够使用 template[slot] imo会更好。