版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第Vue3中插槽(slot)的全部使用方法目录什么是插槽默认内容具名插槽动态插槽名作用域插槽作用域插槽具名作用域插槽写在最后
Vue中的插槽相信使用过Vue的小伙伴或多或少的都用过,但是它的所有用法你是否全部理解呢?本篇文章就为大家带来Vue3中插槽的全部用法来帮助大家查漏补缺。
什么是插槽
简单来说就是子组件中的提供给父组件使用的一个坑位,用slot/slot表示,父组件可以在这个坑位中填充任何模板代码。
比如一个最简单插槽例子:
//父组件
template
div
ChildHelloJuejin/Child
/div
/template
scriptsetuplang="ts"
importChildfrom'./Child.vue'
/script
//子组件Child
template
div
p1/p
slot/
p2/p
/div
/template
子组件中的slot/便是父组件放在子组件标签Child之间的内容。当然这之间你可以传入任何代码片段,都会被放到slot/这个位置。
同样的你也可以在标签Child之间放入变量,比如
//父组件
template
div
Child{{msg}}/Child
/div
/template
scriptsetuplang="ts"
import{ref}from'vue'
importChildfrom'./Child.vue'
constmsg=ref('HelloJuejin')
/script
先解释一下后面频繁出现的两个词插槽和插槽内容,防止后面阅读搞混了:
同样的插槽表示的就是这个msg变量。所以子组件插槽是可以访问到父组件的数据作用域,而插槽内容是无法访问子组件的数据(即父组件中两个Child之间是不能使用子组件中的数据的),这就是所谓的渲染作用域。后面会介绍插槽向插槽内容传参的方式
默认内容
在父组件没有提供任何插槽内容的时候,我们是可以为子组件的插槽指定默认内容的,比如
//子组件
template
div
slot我是默认内容/slot
/div
/template
//父组件1
template
div
Child/Child
/div
/template
scriptsetup
importChildfrom'./Child.vue'
/script
//父组件2
template
div
ChildHelloJuejin/Child
/div
/template
scriptsetup
importChildfrom'./Child.vue'
/script
此时父组件1展示默认内容
父组件2展示提供的内容
具名插槽
很多时候一个插槽满足不了我们的需求,我们需要多个插槽。于是就有了具名插槽,就是具有名字的插槽。简单来说这个具名插槽的目的就是让一个萝卜一个坑,让它们呆在该呆的位置去。比如带name的插槽slotname=xx被称为具名插槽。没有提供name的slot会隐式地命名为default。在父组件中可以使用v-slot:xxx(可简写为#xxx)指令的template元素将目标插槽的名字传下去匹配对应插槽。比如
//子组件
template
div
!--大萝卜--
div
slotname="bigTurnip"/slot
/div
!--小萝卜--
div
slotname="smallTurnip"/slot
/div
!--中萝卜--
div
slotname="midTurnip"/slot
/div
/div
/template
//父组件
template
div
Child
!--#smallTurnip为v-slot:smallTurnip缩写--
template#smallTurnip
/template
template#midTurnip
/template
template#bigTurnip
/template
/Child
/div
/template
scriptsetup
importChildfrom'./Child.vue'
/script
所以父组件中无需在意顺序,只需要写好模板命好名,它就会自动去到它所对应的位置。
动态插槽名
动态插槽名就是插槽名变成了变量的形式,我们可以随时修改这个变量从而展示不同的效果。它的写法是v-slot:[变量名]或者缩写为#[变量名]。
//父组件
template
div
Child
!--等同于#smallTurnip--
template#[slotName]
/template
template#midTurnip
/template
template#bigTurnip
/template
/Child
/div
/template
scriptsetup
import{ref}from'vue'
importChildfrom'./Child.vue'
constslotName=ref('smallTurnip')
/script
作用域插槽
作用域插槽
上面说过插槽内容是无法访问子组件的数据的,但是如果我们想在插槽内容访问子组件的状态该怎么办呢?
其实插槽可以像对组件传递props那样,在slot标签绑定属性从而传递给父组件中的插槽内容。首先来看下默认插槽的传值方式
//子组件
template
div
slotpersonName="xiaoyue"age="18"/slot
/div
/template
//父组件
template
div
Childv-slot="slotProps"
Mynameis{{slotProps.personName}}andIam{{slotProps.age}}yearsoldthisyear
/Child
/div
/template
scriptsetup
importChildfrom'./Child.vue'
/script
你还可以以结构的形式获取slot提供的数据
template
div
Childv-slot="{personName,age}"
Mynameis{{personName}}andIam{{age}}yearsoldthisyear
/Child
/div
/template
注意不能绑定name属性,因为你绑定了name它就成了具名插槽了。同样具名插槽中的name属性也不会传递给插槽内容。因为传递的参数只能在插槽内容中使用,所以这类能够接受参数的插槽就被称为了作用域插槽。
具名作用域插槽
下面再看下具名作用域插槽它的传参方式。它接收参数的方式是通过template标签的指令v-slot的值获取的,所以可以缩写成这样
//父组件
template
div
Child
template#bigTurnip="bigTurnipProps"
{{bigTurnipProps.message}}
/template
/Child
/div
/template
scriptsetup
importChildfrom'.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 事业单位法律岗面试易错题题库试卷及参考答案2026
- 事业单位法律岗面试高频考题题库试卷及参考答案
- 2027年备考会计基础 【零基础学员必练】全真模拟考试试题卷含答案
- 2027年备考会计基础 【零基础学员必练】通关提分题库及完整答案
- 2026年湖南生物机电职业技术学院高职单招笔试职业适应性测验历年参考题库含答案解析
- 2026年湖南外贸职业学院高职单招笔试语文历年参考题库含答案解析
- 2026年渤海理工职业学院高职单招笔试英语历年参考题库含答案解析
- 2026年海南外国语职业学院高职单招笔试综合素质历年参考题库含答案解析
- 2026年河北劳动关系职业学院高职单招笔试职业技能测验历年参考题库含答案解析
- 2026年江西财经职业学院高职单招笔试数学历年参考题库含答案解析
- YY/T 0493-2026牙科学弹性体印模和咬合记录材料
- (2026)发展对象考试测试题库附参考答案
- 2026中国碳中和技术路径与政策激励机制研究报告
- 高考语文必考语言文字运用之字词训练(含答案)
- 华海诚科QFN抢滩先行先进封装蓄势接棒
- 2026客服面试题及参考答案
- 2026秋小学苏教版科学四年级上册第三单元学情测试练习卷含答案三套
- 2027贵州航天电器秋季招聘284人考试模拟试题及答案解析
- 经导管主动脉瓣置换术围手术期共病诊治中国专家共识
- 钢结构监理实施细则
- 高填深挖路基监控量测施工方案 - 副本
评论
0/150
提交评论