1. ホーム
  2. vue.js

[解決済み] コンテンツがある場合のみスロットを表示する

2022-09-11 20:25:27

質問

スロットにコンテンツがある場合のみ表示させる方法はありますか?

例えば、私は単純な Card.vue コンポーネントを作成しており、フッタースロットにコンテンツがある場合にのみフッターを表示させたいと思っています。

テンプレートです。

<template>
    <div class="panel" :class="panelType">
        <div class="panel-heading">
            <h3 class="panel-title">
                <slot name="title">
                    Default Title
                </slot>
            </h3>
        </div>

        <div class="panel-body">
            <slot name="body"></slot>

            <p class="category">
                <slot name="category"></slot>
            </p>
        </div>

        <div class="panel-footer" v-if="hasFooterSlot">
            <slot name="footer"></slot>
        </div>
    </div>
</template>

スクリプトです。

<script>
    export default {
        props: {
            active: true,
            type: {
                type: String,
                default: 'default',
            },
        },

        computed: {
            panelType() {
                return `panel-${this.type}`;
            },

            hasFooterSlot() {
                return this.$slots['footer']
            }
        }
    }
</script>

イン・イン・ビュー

<card type="success"></card>

上記のコンポーネントはフッターを含まないので、レンダリングされないはずですが、レンダリングされています。

を使ってみましたが this.$slots['footer'] を使ってみましたが、これは未定義を返します。

どなたかヒントをお持ちではないでしょうか?

どのように解決するのですか?

以下のサイトで入手可能です。

this.$slots.footer

というわけで、これでうまくいくはずです。

hasFooterSlot() {
  return !!this.$slots.footer
}

.