Vue 插槽 slot
solt 插槽需要分为 2.6.0 版本以上和 2.6.0版本以下。
2.6.0 版本以下的 slot 插槽在,2.x版本将继续支持,但是在 Vue 3 中已被废弃,且不会出现在官方文档中。
作用
插槽 prop 允许我们将插槽转换为可复用的模板,这些模板可以基于输入的 prop ( 也就是在使用者中传递的内容 ) 渲染出不同的内容。这在设计封装数据逻辑同时允许父级组件自定义部分布局的可复用组件时是最有用的。
2.6.0 版本及以上
在 2.6.0 中,Vue 为具名插槽和作用域插槽引入了一个新的统一的语法 (即 v-slot 指令)。它取代了 这两个目前已被废弃但未被移除且仍在文档中的 attribute。slot 和 slot-scope
默认插槽: 当组件中未提供任何插槽内容时,展示默认的内容。如提供了内容,则替代默认内容 ( 只管挖坑,不管怎么用,反正我都丢进去)
Category 组件:分类组件,插槽中提供默认内容
<template><div><p>游戏列表</p><slot>当没有外部内容填充时,我会展示</slot></div>
</template>
App 组件:使用 Category 组件,且不提供插槽内容。
<template><div id="app"><Category/></div>
</template>
只展示默认内容。

当 App 组件中提供插槽内容时:Category 组件就不能使用自闭合,需要使用双标签形式。此时 Vue 会将 组件标签中 的内容在 App 组件中解析完成之后,丢到 Category 组件 中,将 slot 替换
<template><div id="app"><Category><p>这是 App 组件提供的内容</p> </Category></div>
</template>
提供的内容会覆盖默认内容

具名插槽:顾名思义就是有个名字的插槽( 给这个坑取了个名字,使用的时候可以指定往这个坑里面填东西 ) --- v-slot:xxx 只能存在于 <template> 标签中 ( ps : 存在一种情况可以直接写在组件标签上)
Category 组件:分类组件,插槽中提供 name 属性,作为该插槽名称。若是不提供 name 属性,则默认带有隐含的名字“default”,作为默认插槽
<template><div><p>游戏列表</p><slot name="header">这是头部</slot> <br><slot>这是内容</slot> <br></div>
</template>
App组件:通过 v-slot 指令,绑定对应的插槽名称 ( name 属性),就能将内容分发到指定插槽中。
<template><div id="app"><Category><template v-slot:header><p>传递的头部</p></template><template><p>传递的内容</p></template></Category></div>
</template>
但是,如果 Category 组件中存在多个 slot 插槽,任何没有被包裹在带有 v-slot 的 <template> 中的内容都会被视为默认插槽的内容。

具名插槽也可以和 v-bind 、v-on 一样进行缩写,v-slot: 缩写成 #。如下所示。但是切记一点:如果你想使用缩写,那么必须给一个明确的插槽name,即使是 default 也要写上。要么就不写#,直接为默认插槽,否则会报错
// 全写
<Category><template v-slot:gameList>xxx</template>
</Category>// 简写
<Category><template #gameList>xxx</template>
</Category>// 默认插槽简写完整
<Category><template #default>xxx</template>
</Category>// 默认插槽简写不完整报错
<Category><template #>xxx</template>
</Category>
作用域插槽:在使用组件时,让使用者中提供的插槽内容能够访问子组件中才有的数据。父级模板里的所有内容都是在父级作用域中编译的;子模板里的所有内容都是在子作用域中编译的。
Category 组件:分类组件,组件中带有游戏分类数据。
<template><div><p>游戏列表</p><slot></slot></div>
</template><script>
export default {data() {return {games:['lol','dota','刺客信条','只狼']}},
}
</script>
App 组件:使用 Category 组件中的数据渲染出不同的效果、分别渲染为 有序列表,无序列表、h4
<template><div id="app"><Category><ul><li v-for="(game,index) in games" :key="index"><p>{{ game }}</p></li></ul></Category></div>
</template>
代码写的很流畅,看起来完全没毛病,但是控制台报错了啊。

翻译过来就是:属性或方法“games”不是在实例中定义的,而是在渲染过程中引用的。通过初始化属性,确保该属性是可响应的,无论是在data选项中,还是对于基于类的组件。
这说明了啥?在 App 组件中报了这个错,games 不存在,肯定不存在啊,我的 games 数据是存在 <Category> 组件中的啊,在 <Category> 组件中随便你怎么使用都没毛病。但是 App 组件自己没定义,还要强行使用,那咋行。
所以 Vue 使用了 v-bind 指令( 简写为 : ),让 使用者App组件 能够访问到被使用者 <Category> 组件中的数据
<Category> 组件中,通过 v-bind 指令给 slot 插槽绑定了 games 属性,传递的数据就是 games。从此, <Category> 组件 的使用者,只要接收 games 数据,就可以使用。
<template><div><p>游戏列表</p><slot v-bind:games="games"></slot><!-- <slot :games="games"></slot> --></div>
</template>
App组件,通过使用 <Category> 组件,且在 <template> 标签中 通过 v-slot 指令获取数据即可使用。( 这里的 :default 对应上面的,当 slot 插槽未指定 name 属性时,默认自带 default ,可以省略。如果是具名插槽,则指定 对应的 name 属性进行渲染 )
<template><div id="app"><Category><template v-slot:default='slotProps'><!-- <template v-slot='slotProps'> --><ul><li v-for="(game, index) in slotProps.games" :key="index"><p>{{ game }}</p></li></ul></template></Category></div>
</template>
<template> 标签中 通过 v-slot='slotProps' 接收了这个 slotProps,这个名字是随便定义的,对应的就是 <Category> 组件中 <slot> 中绑定的 games 数据。slotProps 是一个对象,键值对就是绑定的 { games:['lol','dota','刺客信条','只狼'] }。所以在使用中,还需要通过 slotProps.games 。

当然,也存在简写方式,那就是 es6 的解构。可以将 slotProps 中的值解构出来直接使用。也可以 重命名,添加默认值等 解构赋值的常用操作
// 单纯解构
<Category><template v-slot:default={games}><ul><li v-for="(game, index) in games" :key="index"><p>{{ game }}</p></li></ul></template>
</Category>// 解构 + 重命名 将 games 重命名未 aaa
<Category><template v-slot={games:aaa}>xxx</template>
</Category>// 解构 + 设置默认值
<Category><template v-slot={games:['恐龙快打']}>xxx</template>
</Category>
动态插槽名:当你的插槽名称不固定,而是根据情况而变化时,你就需要使你的插槽名称是动态的
在 官方文档--模板语法--指令中,存在一个动态参数,具体如下,限制内容请查看文档。
// 这里的 attributeName 会被作为一个 JavaScript 表达式进行动态求值,求得的值将
// 会作为最终的参数来使用。例如,如果你的 Vue 实例有一个 attributeName,其值为 "href",
// 那么这个绑定将等价于 v-bind:href。
<a v-bind:[attributeName]="url"> ... </a>
所以 <slot> 插槽也借鉴了这个方法,实现了 动态插槽名
<Category><template v-slot:[这是动态插槽名称]>xxx</template>
</Category>
独占默认插槽:在传递数据的前提下,如果被提供的内容只有默认插槽时,组件的标签才可以被当作插槽的模板来使用。之前说过 v-slot 必须写在 <template> 标签中,只有一种情况除外,说的就是这个情况。
如果我的 <Category> 组件 中只存在一个默认插槽。且传递了数据
<template><div><p>游戏列表</p><slot :games="games"></slot></div>
</template>
那么这个默认插槽在被使用时,v-slot 指令,可以直接作用在 <Category> 组件标签上,可以简写为 <Category v-slot={games}>
<template><div id="app"><Category v-slot:default={games}>{{ games }}</Category></div>
</template>
这里说一下为啥需要这个 games:如果不接受参数,那是不是就直接是默认插槽,都默认插槽了,还写个锤子的 v-slot 指令啊,直接怼代码不就完事了。
2.6.0版本以下语法
事先声明,在接下来所有的 2.x 版本中 slot 和 slot-scope 属性仍会被支持,但已经被官方废弃且不会出现在 Vue 3 中。
slot:类比于上面的 v-solt,作用于具名插槽与默认插槽,与 v-solt 不同的是,solt 可以写在 <template> 标签中,也可以使用在一个普通元素上。不存在简写方式。
<Category> 组件中存在三个插槽,一个是默认插槽,两个是具名插槽
<template><div><p>游戏列表</p><slot name="header"></slot><slot></slot><slot name="footer"></slot></div>
</template>
App 组件中,分别用 <template> 标签 + slot 指定具名插槽 header,普通元素 p 标签 + slot 指定具名插槽 footer,纯元素的默认插槽,来实现效果
<template><div id="app"><Category><template slot='header'>这是头部</template><p>这是内容</p><p slot="footer">这是底部</p></Category></div>
</template>
展示结果如下,具名插槽一一对应,默认插槽内容页分发到了正确位置。

slot-scope:作用域插槽,同样可以写在 <template> 标签中,也可以使用在一个普通元素上。用法和新版本的 v-slot 作用域插槽一致,可以解构,只是语法不一致
<Category> 组件中存在只存在一个具名插槽,且通过 v-bind: 绑定数据
<template><div><p>游戏列表</p><slot name="header" v-bind="games"></slot></div>
</template>
App 组件中, 通过 slot-scope 接收参数,通过 slot 指定具名插槽 进行渲染。
<Category><template slot='header' slot-scope="games">{{ games }}</template>
</Category>
通过作用域插槽,可以实现 在复用模板的情况下,渲染出不同的 布局和样式。因为 作用域插槽的渲染实际上是受 父级使用者控制的。将数据传递给 使用者后,使用者可以在自己主见内部随意使用,任意布局。
<Category> 组件中代码不变
<template><div><p>游戏列表</p><slot name="header" v-bind="games"></slot></div>
</template>
App 组件中 使用 <Category> 组件 进行不同的布局
<template><div id="app"><Category><template slot='header' slot-scope="games"><ul><li v-for="(item,index) in games" :key="index">{{ item }}</li></ul></template></Category><Category><template slot='header' slot-scope="games"><span style="color:red" v-for="(item,index) in games" :key="index">{{ item }}</span></template></Category></div>
</template>
这就是插槽的便利之处

相关文章:
Vue 插槽 slot
solt 插槽需要分为 2.6.0 版本以上和 2.6.0版本以下。 2.6.0 版本以下的 slot 插槽在,2.x版本将继续支持,但是在 Vue 3 中已被废弃,且不会出现在官方文档中。 作用 插槽 prop 允许我们将插槽转换为可复用的模板,这些模板可以基于…...
【C/C++】C语言位图操作实例(亲测)
C语言中的位图操作通常用于处理大量的二进制数据,例如图像处理、压缩算法等。以下是一些C语言中的位图操作实例: 设置位图中的某一位 void set_bit(unsigned char *bitmap, int bit) {bitmap[bit / 8] | (1 << (bit % 8)); }这个函数将位图中的第…...
Mahout教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介 Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现,包括聚类、分类、推荐…...
wxwidgets Ribbon使用wxRibbonToolBar实例
wxRibbonToolBar就是工具栏,一下是实现的效果,界面只是功能展示,没有美化 实现代码如下所示: MyFrame::MyFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(800, 600)) …...
8.9黄金最新行情走势分析及短线交易策略
近期有哪些消息面影响黄金走势?黄金多空该如何研判? 黄金消息面解析:周三(8月9日)现货黄金维持震荡,目前交投于1930美元附近,隔日现货黄金盘中震荡下行,失守1930关口并在美盘时段…...
VB+SQL房地产评估系统设计与实现
摘 要 房地产评估系统对房地产评估信息进行全面现代化管理。但一直以来人们使用传统人工的方式进行评估,这种管理方式存在着许多缺点,如:效率低、计算量大,容易出错。另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。 随着科学技术的不断…...
用AOP实现前端传参时间的时区转化
用AOP实现前端传参时间的时区转化 新增注解新增AOP切面类Controller传参字段添加注解结束 新增注解 Documented Target({FIELD,METHOD,PARAMETER,ANNOTATION_TYPE}) Retention(RUNTIME) public interface MyDateFormatDeserializer {String pattern() default "yyyy-MM-d…...
mybatis There is no getter for property named ‘*‘ in ‘class java.lang.String
mybatis There is no getter for property named car_port_ids in class java.lang.String 出现这种错误我这边是mapper.xml子查询字段不对导致的 我把查询结果的列的字段放进去结果不识别car_port_ids可能我这种字段本身就有问题 技术博客 http://idea.coderyj.com/ 1.解决 &…...
Mac终端前总会出现 (base) 字样解决
Mac安装了anaconda之后,终端前总会出现 (base) 字样,显示如下: (base) tinghoudeiMac ~ 具体原因是 安装了anaconda后,每次启动终端都会启动anaconda的base环境。 解决办法 设置anaconda 不自启base环境就好了: 禁用…...
RabbitMQ面试题大全含答案
rabbitmq 的使用场景有哪些? ①. 跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列。就像我们除了打电话(同步)以外,还需要发短信,发电子邮件(异步)的通讯方式。 ②. 多…...
Linux配置QT Creator环境:ubuntu中安装QT Creator环境
一、前景 目前市面上很多公司使用QT Creator进行界面开发,基本都会选择在Linux环境进行,优点不仅是市场所需,更是方便后期代码的移植,相较于Windows系统,Linux系统移植性非常好。故此篇文章,介绍如何在Linu…...
机器学习深度学习——池化层
👨🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——卷积的多输入多输出通道 📚订阅专栏:机器学习&&深度学习 希望文章对你们…...
siMLPe:Human Motion Prediction
Back to MLP: A Simple Baseline for Human Motion Prediction解析 摘要1. 简介2. Related Work2.1 基于RNN的人体运动预测2.2 基于GCN的人体运动预测2.3 基于 Attention 的人类运动预测2.4 总结 3. siMLPe3.1 离散余弦变换(Discrete Cosine Transform (DCT)&#x…...
详解——JS map()方法
JavaScript是一种广泛使用的编程语言,用于开发Web应用程序。它具有许多内置函数和方法,其中之一是map()方法。map()方法是一个非常有用的函数,它允许我们在数组中的每个元素上执行相同的操作,并返回一个新的数组。 map()方法的语…...
leetcode做题笔记57
给你一个 无重叠的 ,按照区间起始端点排序的区间列表。 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。 思路一:模拟题意 int pushbackInterval(int…...
SAP Fiori 将GUI中的自开发报表添加到Fiori 工作台
1. 首先我们在workbench 中开发一个GUI report 这里我们开发的是一个简单的物料清单报表 2. 分配一个事务代码。 注意这里的SAP GUI for HTML 要打上勾 3. 创建语义对象( Create Semantic Object) 事物代码: path: SAP NetWeaver ->…...
【Docker】配置指定大小的磁盘空间
背景 测试磁盘满时程序的运行情况 问题 如何使用 docker 来模拟磁盘满的情况 解决方法 创建指定大小的数据卷 volumedocker volume create --driver local --opt typetmpfs --opt devicetmpfs --opt osize50M my_volumn创建 docker 时,使用该数据卷docker run …...
使用Spring五大注解来更加简单的存储Bean对象
在使用Spring框架的时候我们如果使用这种方式来存储bean对象的话未免有点太麻烦了 <bean id"xxx" class"xxx"> </bean> 为了简化存储Bean对象的操作,我们可以使用五大类注解来进行存储Bean对象 我们首先要在配置文件配置扫描路径…...
Netty面试题1
计算机网络模型 OSI采用了分层的结构化技术,共分七层, 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 。 Open System Interconnect 简称OSI,是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参…...
水质分析积分球定义和原理
随着社会经济的快速发展,人们对水质的要求不断提升,特别是生活饮用水,检测项目渐趋完善。在工业化大发展的前提下,水资源正遭受着严重的污染,因此确保水质安全,定期开展对饮用水的检测工作已迫在眉睫。环境…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
大数据驱动企业决策智能化的路径与实践
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:数据驱动的企业竞争力重构 在这个瞬息万变的商业时代,“快者胜”的竞争逻辑愈发明显。企业如何在复杂环…...
云原生时代的系统设计:架构转型的战略支点
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、云原生的崛起:技术趋势与现实需求的交汇 随着企业业务的互联网化、全球化、智能化持续加深,传统的 I…...
