耀极客论坛

 找回密码
 立即注册
查看: 630|回复: 0

Vue3 插槽使用汇总

[复制链接]

336

主题

318

帖子

22万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
220553
发表于 2022-5-8 01:57:12 | 显示全部楼层 |阅读模式
  这篇文章主要给大家分享了Vue3的 插槽使用汇总,在 2.6.0中,vue 为具名插槽和作用于插槽引入了一个新的统一语法:v-slot。它取代了 slot 和 slot-scope 在新版中的应用,下面就一起来看看文章的详细内容吧

一、v-slot 介绍

  v-slot 只能用在 template 或组件上使用,否则就会报错。
  v-slot 也是其中一种指令。
  使用示例:
  1. //父组件代码
  2. ‹child-com>
  3. ‹template v-slot:nameSlot>
  4.   插槽内容
  5. ‹/template>
  6. ‹/child-com>
  7. //组件模板
  8. ‹slot name="nameSlot">‹/slot>
  9. v-slot 的语法,简化 slot、slot-scope 作用域插槽的功能,相比更加强大,代码效率更高。
复制代码
二、匿名插槽

  当组件中只有一个插槽的时候,可以不设置 slot 的 name 属性,v-slot 后可以不带参数,但是 v-slot 在没有设置 name 属性的插槽口也会带有隐含的 “default”。
  匿名插槽使用:
  1. //组件调用
  2. ‹child-com>
  3. ‹template v-slot>
  4.   插槽内容
  5. ‹/template>
  6. ‹/child-com>
  7. //组件模板
  8. ‹slot >‹/slot>
复制代码
  虽然 v-slot 没有设置参数,但不能删除掉 ,否则插槽内容无法正常渲染。

三、具名插槽

  一个组件中有多个插槽的时候,如果没有设置 v-slot 属性值,会默认把元素插到没有设置 name 属性值的 slot 组件中,为了把对应的元素放到指定的位置,就需要借助 v-slot 和 name 属性,把内容对应起来。
  具名插槽使用:
  1. //父组件
  2. ‹child-com>
  3. ‹template v-slot:header>
  4.   头部
  5. ‹/template>
  6. ‹template v-slot:body>
  7.   内容
  8. ‹/template>
  9. ‹template v-slot:footer>
  10.   脚
  11. ‹/template>
  12. ‹/child-com>
  13.      
  14. //子组件   
  15. ‹div>
  16. ‹slot name="header">‹/slot>
  17. ‹slot name="body">‹/slot>
  18. ‹slot name="footer">‹/slot>
  19. ‹/div>
复制代码
  具名插槽缩写:

  v-slot 与 v-bind、v-on 指令一样,也存在缩写。可以把 v-slot: 简写为 # 号。
  如上述 v-slot:footer 可以简写为 #footer 。
  上述的父组件代码可以简化为:
  1. ‹child-com>
  2. ‹template #header>
  3.   头部
  4. ‹/template>
  5. ‹template #body>
  6.   内容
  7. ‹/template>
  8. ‹template #footer>
  9.   脚
  10. ‹/template>
  11. ‹/child-com>
复制代码
  1. 注意:和其他指令一样,只有存在参数时,才可以简写,否则是无效的。
复制代码
四、作用域插槽

  有时让插槽内容能够访问子组件中才有的数据是很有用的。当一个组件被用来渲染一个项目数组时,这是一个常见的情况,我们希望能够自定义每个项目的渲染方式。
  要使子组件上的属性在插槽内容上可用,需要给 slot 绑定一个属性。然后在 v-slot 处接收并定义提供插槽 props 名字。
  使用示例:
  1. //
  2. ‹child-com>
  3. ‹template v-slot:header="slotProps">
  4.   插槽内容--{{ slotProps.item }} 序号--{{ slotProps.index }}
  5. ‹/template>
  6. ‹/child-com>
  7.      
  8. //子组件代码
  9. ‹template>
  10. ‹div v-for="(item, index) in arr" :key="index">
  11.   ‹slot :item="item" name="header" :index="index">‹/slot>
  12. ‹/div>
  13. ‹/template>
  14. ‹script setup>
  15. const arr = ['1111', '2222', '3333']
  16. ‹/script>
复制代码
五、动态插槽名

  v-slot 指令参数也可以是动态的,用来定义动态插槽名。
  如:
  1. ‹child-com>
  2. ‹template v-slot:[dd()]>
  3.   动态插槽名
  4. ‹/template>
  5. ‹/child-com>
  6. ‹script setup>
  7. const dd = () => {
  8.   return 'hre'
  9. }
复制代码
  此处使用的是函数,也可以直接使用变量。
  到此这篇关于Vue3 插槽使用汇总的文章就介绍到这了,更多相关Vue3 插槽使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|耀极客论坛 ( 粤ICP备2022052845号-2 )|网站地图

GMT+8, 2022-11-28 20:12 , Processed in 0.079535 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表