Vue3 插槽

本文详细介绍了Vue中的三种主要插槽类型:匿名插槽、具名插槽(包括动态具名插槽)和作用域插槽。通过实例展示了它们的使用方式和区别,以及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.插槽三大类

  • 匿名插槽
  • 具名插槽
  • 作用域插槽

2.对插槽的理解

   1.  匿名插槽:顾名思义就是没有名字的插槽

        父组件  father.vue

<template>
    <child>
        <span>
            你好Vue
        </span>
    </child>
</template>

        子组件 child.vue

<template>
  <div>
    <!-- 子组件 -->
   我是父组件匿名插槽传来的得值: <slot></slot>
  </div>
</template>

   2. 具名插槽: 顾名思义就是有名字的插槽

       父组件  father.vue

<template>
    <child>
        <template #Vue>
            vue
        </template>
    </child>
</template>

 子组件 child.vue

<template>
  <div>
    <!-- 子组件 -->
   我是父组件具名插槽传来的得值: <slot name="Vue"></slot>
  </div>
</template>

 

       延伸:动态具名插槽

        父组件  father.vue

<template>
    <child>
        <!-- 动态 -->
        <template #[temName]>
            {{ a }}
        </template>
    </child>
</template>

const temName=ref('temName')
const a=ref(20)

 子组件 child.vue

<template>
  <div>
    <!-- 子组件 -->
    <p>我是父组件动态具名插槽传来的得值: <slot name="temName"></slot></p>
  </div>
</template>

3.作用域插槽:官方叫他 作用域插槽。实际上,对比前面两种插槽,我们可以叫它带数据的插槽

        父组件  father.vue 

<template>
    <child>
        <!-- 作用域插槽 -->
        <template #data="{ data }">
            {{ data }}
        </template>
        <template #xiaozhu="{ personName, age }">
            {{ personName }}{{ age }}
        </template>
    </child>
</template>

         子组件 child.vue

<template>
  <div>
     <div v-for="item in arr" :key="item.id">
    <!-- 传值给父组件 -->
      <slot :data="item" name="data"></slot>
    </div>
    <slot :personName="xiaoyue" :age="age" name="xiaozhu"></slot>
  </div>
</template>
<script lang="ts"setup>
import { ref } from "vue";
interface Person {
  id: number
  name: string
}
interface List {
  [index: number]: Person
}
let arr = ref<List>([
  {
    id: 1,
    name: '张三'
  },
  {
    id: 2,
    name: '李四'
  }
])
const age=ref('18')
const xiaoyue=ref('小猪今年')
</script>

#data 是v-slot='data' 的简写

注意

  1.  默认插槽名为default,可以省略default直接写v-slot。缩写为#时不能不写参数,写成#default(这点所有指令都一样,v-bind、v-on)
  2. 多个插槽混用时,v-slot不能省略default

只要出现多个插槽,请始终为所有的插槽使用完整的基于 <template> 的语法

以上就是插槽的全部内容了,大家有什么问题,可以在评论区畅快发言呦!!!

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值