【问题标题】:Insert template element into slot element将模板元素插入槽元素
【发布时间】:2018-01-21 22:23:49
【问题描述】:

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

<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 &gt; div &gt; contentfooter &gt; div &gt; content 等。

我想我可以使用 template 元素而不是 div 来摆脱不必要的(有时是风格破坏)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>

有没有办法将多个元素发送到一个插槽而不先包装它们?

【问题讨论】:

    标签: aurelia aurelia-templating


    【解决方案1】:

    好吧,事实证明你可以简单地在多个元素上使用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] 会更好。

    【讨论】:

    • 是的,另一种方法是使用哑容器无组件作为包装器。 这里的东西
    • @RabahG 哦,这很有趣,想详细说明一下正确的答案吗?
    • 我实际上更愿意为此目的创建一个无容器的 &lt;slot-content&gt; 元素。
    • 我就是这个意思
    • 你为什么不使用默认插槽?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 2012-11-09
    相关资源
    最近更新 更多