【Vue3】插槽的使用及其分类

历史小剧场

后来我才明白,造反的宋江,和招安的宋江,始终是同一个人。
为什么要造反?
造反,就是为了招安。 ----《明朝那些事儿》

概念

在日常的项目开发中,当我们在编写一个完整的组件时,不可避免的会引用一些外部组件或者自定义组件。而有些内容是在父组件中一样的,而在子组件中会对一些数据单独的处理。为了解决类似这样的问题,Vue设计出来了slot这个东西,也可以称为Vue的内容分发机制,它的主要作用就是向子组件的指定位置插入一断内容,这个内容可以是HTML或者其他组件。

默认插槽

这里有两个组件

Father

<!--  -->
<template><div class="category"><Category title="今日美食推荐"><ul><li v-for="item in foods" :key="item.id">{{ item.name }}</li></ul></Category><Category title="今日美景大赛"><img :src="imageUrl" alt=""></Category><Category title="今日电影直播"><video :src="videoUrl" controls /></Category></div>
</template><script setup lang="ts" name="Father">
import { reactive, ref } from 'vue';
import Category from './Category.vue'
const foods = reactive([{id: 1,name: '鱼香肉丝'},{id: 2,name: '麻婆豆腐'},{id: 3,name: '大肉饼'}
])const imageUrl = ref('https://images.wallpaperscraft.com/image/single/japanese_apricot_flowers_buds_1252465_1280x720.jpg')
const videoUrl = ref('https://cdn.pixabay.com/video/2021/04/12/70796-538877060_large.mp4')
</script><style lang="scss" scoped>
.category {display: flex;// 均分开justify-content: space-evenly; 
}
img, video {width: 100%;
}
</style>

Child:

<!--  -->
<template><div class="content"><h2>{{ title }}</h2><slot>默认内容</slot></div>
</template><script setup lang="ts" name="Category">
defineProps(['title'])
</script><style lang="scss" scoped>
.content {background-color: skyblue;width: 200px;height: 300px;border-radius: 10px;padding: 10px;
}
h2 {text-align: center;background-color: green;color: white;font-weight: 800;
}
</style>

具名插槽

具名插槽就是给我们的插槽起一个名字,即给插槽定义一个name属性

Child:

<!--  -->
<template><div class="content"><slot name="s1">内容1</slot><slot name="s2">内容2</slot></div>
</template><script setup lang="ts" name="Category">
</script><style lang="scss" scoped>
.content {background-color: skyblue;width: 200px;height: 300px;border-radius: 10px;padding: 10px;
}</style>

Father:

<!--  -->
<template><div class="category"><Category title=""><template v-slot:s2><ul><li v-for="item in foods" :key="item.id">{{ item.name }}</li></ul></template><template v-slot:s1><h2>今日美食推荐</h2></template></Category><Category><template v-slot:s2><img :src="imageUrl" alt="" /></template><template v-slot:s1><h2>今日美景大赛</h2></template></Category><Category><template #s2><video :src="videoUrl" controls></video></template><template #s1><h2>今日电影直播</h2></template></Category></div>
</template><script setup lang="ts" name="Father">
import { reactive, ref } from 'vue';
import Category from './Category.vue'
const foods = reactive([{id: 1,name: '鱼香肉丝'},{id: 2,name: '麻婆豆腐'},{id: 3,name: '大肉饼'}
])const imageUrl = ref('https://images.wallpaperscraft.com/image/single/japanese_apricot_flowers_buds_1252465_1280x720.jpg')
const videoUrl = ref('https://cdn.pixabay.com/video/2021/04/12/70796-538877060_large.mp4')
</script><style lang="scss" scoped>
.category {display: flex;// 均分开justify-content: space-evenly; 
}
h2 {text-align: center;background-color: green;color: white;font-weight: 800;
}
img, video {width: 100%;
}
</style>

作用域插槽

作用域插槽:数据在子组件那边,但根据数据生成的结构,却由父组件决定

父组件使用:变量 传递数据

<!--  -->
<template><div class="content"><slot name="s1">内容1</slot><slot name="s2" :foods="foods">内容2</slot></div>
</template><script setup lang="ts" name="Category">
import { reactive } from 'vue';const foods = reactive([{id: 1,name: '鱼香肉丝'},{id: 2,name: '麻婆豆腐'},{id: 3,name: '大肉饼'}
])
</script><style lang="scss" scoped>
.content {background-color: skyblue;width: 200px;height: 300px;border-radius: 10px;padding: 10px;
}</style>

父组件可以使用params读取到子组件传递过来的数据

<!--  -->
<template><div class="category"><Category title=""><template v-slot:s2="params"><ul><li v-for="item in params.foods" :key="item.id">{{ item.name }}</li></ul></template><template v-slot:s1><h2>今日美食推荐</h2></template></Category><Category><!-- 解构出来 --><template v-slot:s2="{foods}"><ol><li v-for="item in foods" :key="item.id">{{ item.name }}</li></ol></template><template v-slot:s1><h2>今日美景大赛</h2></template></Category><Category><!-- 解构出来 --><template #s2="{foods}"><h4 v-for="item in foods" :key="item.id">{{ item.name }}</h4></template><template #s1><h2>今日电影直播</h2></template></Category></div>
</template><script setup lang="ts" name="Father">
import Category from './Category.vue'</script><style lang="scss" scoped>
.category {display: flex;// 均分开justify-content: space-evenly; 
}
h2 {text-align: center;background-color: green;color: white;font-weight: 800;
}
img, video {width: 100%;
}
</style>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/28630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【动态规划】0-1背包问题

【动态规划】0-1背包问题 题目:现在有四个物品&#xff0c;背包总容量为8&#xff0c;背包最多能装入价值为多少的物品? 我的图解 表格a【i】【j】表示的是容量为j的背包装入前i个物品的最大价值。 拿a【1】【1】来说&#xff0c;它的值就是背包容量为1&#xff0c;只考虑…

【探索Linux命令行】从基础指令到高级管道操作的介绍与实践

目录 man 指令&#xff08;说明&#xff09; 介绍 cp 指令&#xff08;复制&#xff09; ​编辑 mv 指令&#xff08;移动&#xff09; ​编辑 cat 指令&#xff08;类似cout&#xff09; less&#xff08;查找&#xff09; head & tail&#xff08;打印&#xff…

[数据集][目标检测]减速区域检测数据集VOC+YOLO格式1654张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1654 标注数量(xml文件个数)&#xff1a;1654 标注数量(txt文件个数)&#xff1a;1654 标注…

鸿蒙轻内核A核源码分析系列六 MMU协处理器(2)

3、MMU汇编代码 在arch\arm\arm\include\arm.h文件中&#xff0c;封装了CP15协处理器相关的寄存器操作汇编函数。我们主要看下MMU相关的部分。 3.1 CP15 C2 TTBR转换表基地址寄存器 代码比较简单&#xff0c;结合下图&#xff0c;自行查看即可。该图来自《ARM Cortex-A9 Tec…

JavaFX HBox

JavaFX API具有将UI控件显示到场景图上的布局类。HBox布局类将JavaFX子节点放在水平行中。 新的子节点附加到右侧的末尾。默认情况下&#xff0c;HBox布局尊重子节点的首选宽度和高度。 当父节点不可调整大小时&#xff0c;例如Group节点&#xff0c;HBox的行高度设置为子节点的…

【工作】计算机行业相关的十六类工作简介

本文简单介绍了计算机行业相关的工作类别&#xff0c;共16种&#xff0c;包括常见招聘要求与平均工资。平均工资信息来源&#xff1a;米国企业点评职场社区glassdoor&#xff08;https://www.glassdoor.com/index.htm&#xff09; &#xff08;一&#xff09;软件工程师 软件…

图书馆图书可视化分析+大屏

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 目录 摘要前言技术栈开发环境数据说明 正文数据获取数据存储数据清理数据分析数据挖掘关联规则二分类预测 数据可视化书籍价格区间柱状图书籍评…

质疑标普,理解标普,加入标普

上周我在文章里提到过&#xff0c;标普信息科技LOF(161128)出现套利机会。每天申购卖出&#xff0c;到现在一个账户56*6336润。 得益于美股七巨头轮流领涨&#xff0c;161128依旧坚挺&#xff0c;每天溢价都是10%&#xff0c;成交量1个多亿&#xff0c;场内新增份额才400万份&…

路由器虚拟服务器有什么作用

现如今在IPv4时代&#xff0c;由于公网IP地址的匮乏&#xff0c;约有70%的电脑都处于内网中&#xff0c;上网需要通过路由器。如果反过来想要访问身处内网的电脑&#xff0c;我们就需要在路由器里开放相应的端口才能实现。而这开放端口的功能&#xff0c;在路由器里就叫做虚拟服…

NASA数据:南极海洋生物资源

Antarctic Marine Living Resources (AMLR) program 南极海洋生物资源许可证 南极海洋生物资源保护委员会公约区受到管制。任何打算从该区域捕获海洋生物的人都必须获得许可证。 简介 美国是南极海洋生物资源保护委员会&#xff08;Commission for the Conservation of Anta…

JVM面试重点-2

16. 吞吐量优先和响应时间优先的回收器是哪些&#xff1f; 吞吐量优先&#xff1a;Parallel Scavenge Parallel Old&#xff08;多线程并行&#xff09;->简称&#xff1a; PSPO -> JDK1.8默认响应时间优先&#xff1a;ParNew CMS&#xff08;并发回收垃圾&#xff09…

VMware 桥接网络突然无法上网

VMware 桥接网络突然无法上网 0. 问题1. 解决方法 0. 问题 昨天&#xff0c;VMware 桥接网络正常使用&#xff0c;今天突然无法上网。 1. 解决方法 打开VMware的虚拟网络编辑器&#xff0c;将桥接模式的网络从“自动”改成你要使用的网卡&#xff0c;问题解决。 完成&#…

通过命令行启动MySQL

通过命令行启动MySQL 右击&#xff0c;选择管理员运行 停止MySQL net stop你的服务名称 net stop MySQL启动MySQL net start你的服务名称 net start MySQL

ElasticSearch地理空间数据了解

ElasticSearch地理空间数据了解 使用场景 Elasticsearch 的地理空间数据处理功能在现代社会中有着广泛的应用&#xff0c;以下是一些常见的使用场景和方向&#xff1a; 1. 位置搜索和导航 本地服务发现&#xff1a;应用程序可以使用 Elasticsearch 查找用户附近的餐馆、商店…

【java分布式计算】分布式计算程序设计基础

期末复习 自留 重点只抓考点 目录 基本技术 SOCKETS网络套接字 多线程 数据序列化 Java I/O流 集合容器 范型 内部类、匿名类、Lambda&#xff08;代码&#xff09; 项目构建管理工具 高级技术 注解&#xff08;代码&#xff09; 反射&#xff08;代码&#xff09;…

C语言笔记第15篇:文件操作

1、为什么使用文件&#xff1f; 如果没有文件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运行程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进行持久化…

【PL理论】(29) OOP:面向对象编程 | 案例研究:C++ 中的类 | 继承 | 继承和指针 | Object-oriented Programming

&#x1f4ad; 写在前面&#xff1a;本章我们将进入 Object-oriented Programming&#xff0c;面向对象编程的讲解&#xff0c;探讨 C 中的类&#xff0c;继承等。 目录 0x00 面向对象编程 0x01 C语言中的结构体 0x02 案例研究&#xff1a;C 中的类 0x03 术语 0x04 继承&…

PHP调用阿里云OSS的SDK封装成服务的完整指南与问题解决

在现代Web开发中&#xff0c;使用云存储来管理和存储大量的静态文件已经成为常态。阿里云OSS&#xff08;对象存储服务&#xff09;是其中一个非常受欢迎的选择。在这篇文章中&#xff0c;我们将详细讲解如何在PHP项目中集成并使用阿里云OSS SDK。 #### 一、前期准备 在开始之…

vue3轮播图怎么做

先看效果 实现代码 <n-carouseleffect"card"dot-type"line"draggable:autoplay"!isHovered":current-index"currentIndex"prev-slide-style"transform: translateX(-150%) translateZ(-450px);opacity:1"next-slide-st…

【MySQL】(基础篇十三) —— 联结

联结 本文介绍什么是联结&#xff0c;为什么要使用联结&#xff0c;如何编写使用联结的SELECT语句。介绍如何对被联结的表使用表别名和聚集函数。 SQL最强大的功能之一就是能在数据检索查询的执行中联结&#xff08;join&#xff09;表。联结是利用SQL的SELECT能执行的最重要…