Vue3 插槽用法详解

devtools/2024/10/18 7:45:06/
插槽的概念

你可以把插槽想象成是预留给父组件填充内容的占位符。这样一来,父组件就可以根据需要插入 HTML 结构或者其他组件了。

插槽分为:匿名插槽、具名插槽、作用域插槽

匿名插槽

当子组件中有多个插槽时,父组件传入的内容会填充到子组件中的第一个插槽中。

子组件:

<template><div>我是子组件<slot></slot></div>
</template> 

父组件:

<script setup lang="ts">
import HomeView from "./views/HomeView.vue";
</script><template><HomeView><div>我是插槽的内容</div></HomeView>
</template>
具名插槽

在子组件中定义一个带有 name 属性的 slot 标签,父组件可以通过 slot 属性将内容插入到指定的插槽中。

子组件:

<template><div>我是子组件<slot name="content"></slot></div>
</template> 

父组件:

<script setup lang="ts">
import HomeView from "./views/HomeView.vue";
</script><template><HomeView><template v-slot:content><div>我是插槽content的内容</div></template></HomeView>
</template>

上面的 v-slot:content 可以简写为:#content

<script setup lang="ts">
import HomeView from "./views/HomeView.vue";
</script><template><HomeView><template #content><div>我是插槽content的内容</div></template></HomeView>
</template>
作用域插槽

子组件可以在插槽中传递数据给父组件,父组件可以通过 v-slot 指令接收这些数据,并根据需要进行处理。

子组件:

<script setup lang="ts">
import { ref } from "vue";
const m=ref({a:1})
</script><template><div>我是子组件<!-- 匿名作用域插槽 --><slot :data1="m"></slot><!-- 具名作用域插槽 --><slot name="content" :data2="m"></slot></div>
</template> 

父组件:

<script setup lang="ts">
import HomeView from "./views/HomeView.vue";
</script><template><HomeView><template v-slot="{data1}"><div>{{data1}}</div></template><template v-slot:content="{data2}"><div>{{ data2 }}</div></template></HomeView>
</template>

上面的具名作用域插槽 v-slot:content="{data2} 也可以简写为:#content="{data2}

动态插槽

对于具名插槽和具名作用域插槽,我们可以定义一个变量,给这个变量赋不同的插槽的名字,这样就可以动态显示对应名字的插槽。

子组件:

<template><div>我是子组件<slot name="top"></slot><slot name="middle"></slot></div>
</template>

 父组件:

<script setup lang="ts">
import { ref } from "vue";
import HomeView from "./views/HomeView.vue";
const slotName=ref('top')
// 改变slotName的值,将其值设置为slot的对应名字,可以动态切换插槽显示
const changeSlotName=()=>{slotName.value="middle"
}
</script><template><HomeView><template #[slotName]><div>我是{{slotName}}插槽的内容</div><button @click="changeSlotName">按钮</button></template></HomeView>
</template>

http://www.ppmy.cn/devtools/93790.html

相关文章

解决 MacOS 连接公司 VPN 成功但是不能网络的问题

目录 解决办法2024 Mac mini 爆料 解决办法 操作比较简单&#xff0c;修改配置文件即可&#xff08;如果没有则需要手动创建&#xff09;。 sudo vim /etc/ppp/options在此文件下&#xff0c;加入 plugin L2TP.ppp&#xff1a; plugin L2TP.ppp如果文件里有l2tpnoipsec&…

搭建知识中台:让企业告别低效率

在当今这个信息爆炸、知识更新日新月异的时代&#xff0c;企业面临着前所未有的挑战与机遇。如何在浩瀚的信息海洋中高效筛选、整合并利用知识资源&#xff0c;成为决定企业竞争力的关键因素之一。因此&#xff0c;搭建知识中台&#xff0c;构建企业知识管理的核心枢纽&#xf…

Git相关教程

版本控制 学习目标 理解版本控制的必要性了解常用的版本控制方式熟悉 Git 的使用方法 什么是版本控制 可以把一个版本控制系统理解为一个“数据库”&#xff0c;在需要的时候&#xff0c;它可以帮你完整地保存一个项目的快照。当你需要查看一个之前的快照&#xff08;称之为…

Hadoop大集群配置文档-粗略版-3万字长文 (包括hive,zookeeper,hbase,flume等中间件和mysql等)

先填一下上次许诺的坑&#xff1a; &#xff08;许诺的那篇文章链接如下&#xff09; 如何用sql在1分钟从1T数据中精准定位查询&#xff1f;Hive离线数仓 Spark分析-CSDN博客文章浏览阅读1.2k次&#xff0c;点赞38次&#xff0c;收藏14次。在大数据-Hadoop体系中 &#xff0c;…

Django数据库多对多

3.17 Django数据库多对多 在Django中,多对多关系通常通过一个自动创建的中间模型来实现。这个中间模型包含了两个外键,分别指向多对多关系的两端。 示例: #创建models class Auther(models.Model):name=models.CharField(verbose_name=作者,max_length=32)class Book(mod…

Python 绘图进阶之箱线图:揭示数据的分布和异常值

Python 绘图进阶之箱线图&#xff1a;揭示数据的分布和异常值 引言 在数据分析中&#xff0c;理解数据的分布情况和识别异常值是非常重要的任务。箱线图&#xff08;Box Plot&#xff09;作为一种简洁有效的统计图表&#xff0c;能够直观地展示数据的中位数、四分位数、极值以…

IDEA关键词全局检索-之jar包

正常没有下载到源码的jar包&#xff0c;是无法检索到.class编译文件中内容的&#xff1a; repository本地仓库中&#xff0c;也是没有源码的 检索步骤&#xff1a; 1、首先&#xff0c;下载源码 - 可以配置maven自动下载所有jar包的源码&#xff08;再同样配置File-NewProje…

linux高级编程(线程)(互斥与同步)(死锁)

互斥 进线程输出尽量加上fflush&#xff0c;因为可能不满足结束条件&#xff08;有时候没有\n&#xff09; 概念&#xff1a; 互斥 》在多线程中对临界资源的排他性访问。 互斥机制 》互斥锁 》保证临界资源的访问控制。 要求锁的范围尽可能短&#xff08;尽…