仅在有内容的情况下显示广告位

有什么方法可以只显示包含任何内容的广告位?

例如,我正在构建一个简单的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'],但这返回未定义。

有人有提示吗?

村村小卤蛋2020/03/11 23:22:07

希望我理解这一权利。<template>如果插槽为空,为什么不使用未渲​​染标签。

<slot name="foo"></slot>

像这样使用它:

<template slot="foo">
   ...
</template>
Tony宝儿2020/03/11 23:22:07

它应该在

this.$slots.footer

因此,这应该工作。

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

实例