Vue插槽 slot 高级特性 必会 用的最多

本质就是 父组件想往子组件里面插些东西

基本使用
父组件 往子组件slot里面插入内容,不插则显示默认值
可插入一段内容 也可以是组件标签都可以
代码
父组件
注: 当插入子组件内容为空时显示子组件插槽中的默认值

<template>
    <div>
        <p>vue 高级特性</p>
        <hr>
        <!-- slot 基本使用-->
        <SlotDemo>
            <!-- 插入到子组件插槽的内容 -->
            {{info.position}}
        </SlotDemo>
    </div>
</template>

<script>
import SlotDemo from './SlotDemo.vue'
// import ScopedSlotDemo from './ScopedSlotDemo.vue'
// import SlotNamedDemo from './SlotNamedDemo.vue'

export default {
    components: {
        SlotDemo,
        // ScopedSlotDemo,
        // SlotNamedDemo
    },
    data() {
        return {
            info: {
                number: '13',
                position: 'PG',
            }
        }
    }
}
</script>

子组件

<template>
    <div>
        <slot>
            默认内容,即父组件没设置内容时,这里显示
        </slot>
    </div>
</template>

<script>
export default {
    data() {
        return {}
    }
}
</script>

作用域插槽
本质就是将子组件中的数据拿到父组件中来用
父组件代码

<template>
    <div>
        <p>vue 高级特性</p>
        <hr>
        <!-- slot 作用域插槽使用-->
        <ScopedSlotDemo v-slot="slotProps">
            {{slotProps.slotData}}
        </ScopedSlotDemo>
    </div>
</template>

<script>
// import SlotDemo from './SlotDemo.vue'
import ScopedSlotDemo from './ScopedSlotDemo.vue'
// import SlotNamedDemo from './SlotNamedDemo.vue'

export default {
    components: {
        // SlotDemo,
        ScopedSlotDemo,
        // SlotNamedDemo
    },
    data() {
        return {
            info: {
                number: '13',
                position: 'PG',
            }
        }
    }
}
</script>

子组件代码

<template>
    <div>
        <slot :slotData="name">
            默认内容
        </slot>
    </div>
</template>

<script>
export default {
    data() {
        return {
            name:"Tiger"
        }
    }
}
</script>

具名插槽
本质就是将父组件中的内容,根据名字对号入座插入到子组件中

父组件代码

<template>
    <div>
        <p>vue 高级特性</p>
        <hr>
        <!-- slot 具名插槽-->
        <SlotNamedDemo>
            <template v-slot:header>
                <h1>我来组成头部</h1>
            </template>
            <p>我是主要内容</p>
            <template v-slot:footer>
                <h1>我来组成脚部</h1>
            </template>
        </SlotNamedDemo>
    </div>
</template>

<script>
// import SlotDemo from './SlotDemo.vue'
// import ScopedSlotDemo from './ScopedSlotDemo.vue'
import SlotNamedDemo from './SlotNamedDemo.vue'

export default {
    components: {
        // SlotDemo,
        // ScopedSlotDemo,
        SlotNamedDemo
    },
    data() {
        return {
            info: {
                number: '13',
                position: 'PG',
            }
        }
    }
}
</script>

子组件代码

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

<script>
export default {
    data() {
        return {
        }
    }
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值