Vue-几种插槽(slot)的使用

news2024/9/22 9:38:23

插槽(slot)

插槽在vue中是一种很常见的写法,让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式

一共有三种分类:默认插槽、具名插槽、作用域插槽,下面一一根据案例改造说明

1 基本案例

首先编写一个基本的案例,三个组件展示不同的数据类型

页面进行展示

现在要改需求,美食的列表只展示一个海报图片,电影则展示一段宣传视频,游戏则不变

如果要按照美食的需求去改统一加上照片

那么三个列表都有了这个照片

当然可以使用v-show判断

虽然可以实现效果,但是比较麻烦,而且电影的列表如果也按照这样判断,那么代码维护性特别低,逻辑非常混乱

这时候就可以使用插槽了

2 插槽的基本使用

所谓插槽,其实就是挖个坑,等着使用者进行填充

下面的案例是一个最基本的单个插槽使用,也叫默认插槽

比如下面我改造了下代码,在组件标签里面写一个doc元素

但是查看的时候发现什么都没有

这是因为虽然定义了元素,但是vue不知道去组件哪个地方填充,这个时候我们需要在被需要填充的组件里面定义一个插槽(slot)标签

这样我就可以只需要一个插槽,对不同的组件进行不同的元素展示了,如下

图片,列表,视频,我想要什么就定义什么,组件只需要一个插件接收即可,这样就能实现动态展示同一个组件不同的数据

值得注意点是,虽然通过组件标签把数据和资源传输到了组件中并使用插槽进行展示,但是都是通过app这个组件进行传输的,所以对元素的样式控制,完全可以在app.vue里面处理完之后再传递

当然如果非要把样式在用到插槽的组件中进行处理,也是没问题的

不管在那处理,都是一样的

插槽的默认值

插槽是可以定义默认值的,当没有对插槽进行填充的时候,就会展示默认值,如下所示我把组件里面的内容注释掉了,这时候就会出现插槽的默认值:

图片被默认值取代了

3 具名插槽

默认插槽是插槽家族中最简单的使用方式,下面的具名插槽则是比它稍微复杂些的一个使用方式

顾名思义,它指的是具有名字的插槽

所以改下上面的需求,在原有的基础上,加入更多的元素,通过另外一个插槽实现,也就是多个插槽

如果直接复制一个默认插槽,肯定是不行的

发现全部的元素都出现了两份,这不是我们想要的效果

插槽确实需要些多个,但是需要name指定插槽的名称

但是发现还是不行

因为虽然给插槽命名了名称,但是插入内容的时候并没有告诉对应的插槽,所以需要使用slot属性去标识具体的插槽

多个插值小技巧

如果有多个元素需要使用同一个插槽是不会进行数据覆盖的,这种情况我们可以定义一个div,然后在div中指定插槽的name

一样的效果

template使用技巧

如果想要多个元素并且不想再多生成一个无用的div,可以使用template标签

template的v-slot写法

一旦使用了template标签,就有了第二种写法了,这是vue2.6提出来的,v-slot:xxx

v-slot的写法只能作用于template标签上,不信你看,这里我加到了div身上

直接报错了

以上就是具名插槽的用法了

4 作用域插槽

说完了默认插槽和具名插槽,接下来就是插槽的最后一种用法:作用域插槽

说到作用于大多数人想到的是js的作用域,这个作用域插槽还真和js的作用域有几分相似

现在有一个需求,根据菜单生成的数据还是一样的数据,但是展示方式不同

比如第一个列表还是无序的,第二个列表是有序的,第三个列表则要把游戏名称以h4的形式展现

这时候就可以借助作用域插槽了

如果正常写

会报错,表示找不到games

这就是一个作用域的问题,我们传递了games,需要在接收方定义template使用scope属性进行接收

另外一种写法

老是写传递的参数有点烦,就可以使用这种写法

传递多个属性

不止可以传递一个属性,比如:

效果都是一样的

5 插槽总结

  1. 作用:让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适用于 父组件 ===> 子组件
  2. 分类:默认插槽、具名插槽、作用域插槽
  3. 使用方式:
  • 1 默认插槽:
  • 父组件中:
            <Category>
               <div>html结构1</div>
            </Category>
    子组件中:
            <template>
                <div>
                   <!-- 定义插槽 -->
                   <slot>插槽默认内容...</slot>
                </div>
            </template>
    

2 具名插槽:

父组件中:
        <Category>
            <template slot="center">
              <div>html结构1</div>
            </template>

            <template v-slot:footer>
               <div>html结构2</div>
            </template>
        </Category>
子组件中:
        <template>
            <div>
               <!-- 定义插槽 -->
               <slot name="center">插槽默认内容...</slot>
               <slot name="footer">插槽默认内容...</slot>
            </div>
        </template>
  • 3 作用域插槽
  • 1 理解:数据在组件的自身,但根据数据生成的结构需要组件的使用者来决定。(games数据在Category组件中,但使用数据所遍历出来的结构由App组件决定)
  • 2 具体编码:
  • 父组件中:
                    <Category>
                            <template scope="scopeData">
                                    <!-- 生成的是ul列表 -->
                                    <ul>
                                            <li v-for="g in scopeData.games" :key="g">{{g}}</li>
                                    </ul>
                            </template>
                    </Category>
    
                    <Category>
                            <template slot-scope="scopeData">
                                    <!-- 生成的是h4标题 -->
                                    <h4 v-for="g in scopeData.games" :key="g">{{g}}</h4>
                            </template>
                    </Category>
    子组件中:
            <template>
                <div>
                    <slot :games="games"></slot>
                </div>
            </template>
                    
            <script>
                export default {
                    name:'Category',
                    props:['title'],
                    //数据在子组件自身
                    data() {
                        return {
                            games:['红色警戒','穿越火线','劲舞团','超级玛丽']
                        }
                    },
                }
            </script>
    

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

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

相关文章

12.1 物业管理项目中的新知识点

1.RESTful 2.雪花ID 3.mybatis的动态sql 很多时候需要实现多条件查询&#xff0c;手动判断拼接sql有些麻烦 mybatis提供了一个动态sql实现多条件查询的方法 3.1 if元素 使用if元素可以根据条件来包含或排除某个SQL片段 <select id"search" resultType"Hous…

OpenCV——实验结果输出《图像金字塔》和《图像轮廓》

1.高斯金字塔 img cv2.imread(./AM.png) print(img.shape) upcv2.pyrUp(img) cv_show(up,up)#只是将图片的大小改变了,并且是2倍2倍的增长。 print (up.shape) downcv2.pyrDown(img) cv_show(down,down) print(down.shape) up_downcv2.pyrDown(up) cv_show(up_down,np.hstack…

SSMP整合案例(4) Spring Boot整合MyBatis-Plus实现分页查询

文章 SSMP整合案例(3) 创建数据层并在测试类中运行数据库增删查改操作我们编写了MyBatis-Plus以Druid为数据源的方式 做了数据库的增删查改操作 那么 下面我们继续写 分页查询 我们 先写这样一段代码 bookDao.selectPage()selectPage就是BaseMapper提供给我们的分页查询函数 但…

【Spring Cloud + RabbitMQ 实现分布式消息总线】—— 每天一点小知识

&#x1f4a7; S p r i n g C l o u d R a b b i t M Q 实现分布式消息总线 \color{#FF1493}{Spring Cloud RabbitMQ 实现分布式消息总线} SpringCloudRabbitMQ实现分布式消息总线&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; …

redis集群原理

redis是单线程&#xff0c;但是一般的作为缓存使用的话&#xff0c;redis足够了&#xff0c;因为它的读写速度太快了。 官方的一个简单测试&#xff1a; 测试完成了50个并发执行100000个请求。 设置和获取的值是一个256字节字符串。 结果:读的速度是110000次/s,写的速度是81000…

基于JAVA的高校心理咨询系统/ 基于web的高校心理咨询系统/心理咨询系统

​ 摘 要 近年来,基于网络的高校心理咨询系统已成为社会的发展趋势&#xff0c;我国对高校心理咨询非常重视&#xff0c; 高校心理咨询工作面临着严峻考验&#xff0c;而网络的普及为高校心理咨询的信息化提供了必要的条件。本文主要研究了如何设计和开发基于B/S 高校心理咨询…

[进阶]反射-认识反射、获取类

反射 反射就是&#xff1a;加载类&#xff0c;并允许以编程的方式解剖类中的各种成分&#xff08;成员变量、方法、构造器等&#xff09;。 反射学什么&#xff1f; 学习获取类的信息、操作它们 反射第一步&#xff1a;加载类&#xff0c;获取类的字节码&#xff1a;Class对…

十大基础算法

一、选择排序 过程简单描述&#xff1a; 首先&#xff0c;找到数组中最小的那个元素&#xff0c;其次&#xff0c;将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。其次&#xff0c;在剩下的元素中找到最小的元素&#xff0c;将它与数组的第二…

翻筋斗觅食策略改进海鸥优化算法

目录 一、非线性参数A策略 二、翻筋斗觅食策略 基本 SOA 有一些局限性&#xff0c;例如容易陷入局部最优值、后期收敛缓慢、勘探与开发能力不平衡等&#xff0c;在求解复杂优化问题时尤甚。为了改善基本SOA的不足&#xff0c;提出一种基于翻筋斗觅食策略的改进 SOA(SFSOA)。…

【Neo4j教程之CQL函数基本使用】

&#x1f680; Neo4j &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;C…

基于stm32单片机的ESP-01S模块(wifi模块)的使用

一、开发环境 开发板&#xff1a;野火stm32f407开发板 wifi模块&#xff1a;ESP-01S&#xff08;核心处理器 ESP8266 &#xff09;&#xff0c;固件版本&#xff08;MQTT固件&#xff09; 操作系统&#xff1a;rt-thread操作系统 二、ESP-01S模块介绍 ESP-01S 是由安信可科技开…

【已解决】Vue3使用Element-plus按需加载时消息弹框ElMessage没有样式

Vue3使用Element-plus时消息弹框ElMessage没有样式 问题描述 Element-plus在使用ElMessage消息弹框的时候没有样式&#xff0c;按照官方的按需加载的方式引入的 1、Element-plus使用了自动按需导入&#xff0c;vite.config.js配置如下&#xff1a; plugins: [vue(),AutoImpo…

【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(通用语言体系)

一文带领你透视DDD领域驱动模型的本质和设计原理分析指南&#xff08;通用语言体系&#xff09; 前言介绍降低沟通成本问题&#xff1a;各自建立属于自己领域/层面的语言标准解决方案1&#xff1a;专业术语转换为接地气的话术解决方案2&#xff1a;用简单的案例和背景信息进行描…

【无监督学习】1、MOCOv1 | 用于提升无监督学习效果的动量对比学习

文章目录 一、背景二、方法2.1 对比学习&#xff08;字典查表&#xff09;2.2 动量对比函数2.3 Pretext Task 三、效果3.1 数据集3.2 训练细节3.3 实验 论文&#xff1a;Momentum Contrast for Unsupervised Visual Representation Learning 代码&#xff1a;https://github.c…

【Java|多线程与高并发】wait和notify方法详解

文章目录 1.前言2.wait和notify的基本使用3. notifyAll方法4. wait和sleep方法的对比5. 总结 1.前言 在Java多线程环境中,线程之间是抢占式执行的,线程的调度是随机的.这就很难受了. 在很多情况下我们希望线程以我们想要的顺序来执行. 这就需要wait和notify这两个方法 2.wait和…

Java——《面试题——MySQL篇》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 目录 前文 1、数据库的三范式是什么&#xff1f; 2、MySQL数据库引擎有哪些 3、说说…

【五子棋实战】第2章 博弈树负值极大alpha-beta剪枝算法

【五子棋实战】第2章 博弈树极大极小值alpha-beta剪枝算法 博弈树 极大极小值搜索Minimax 负值极大法Negamax alpha-beta剪枝 博弈树负值极大alpha-beta剪枝算法代码实现 ## 初始化输入、确定输出 ## 开始回溯 ## 判赢 ## 评估-计算分数 总结 继续学习下一篇实战&…

注解和异常的详细笔记

注解的理解 注解(Annotation)也被称为元数据(Metadata)&#xff0c;用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息。和注释一样&#xff0c;注解不影响程序逻辑&#xff0c;但注解可以被编译或运行&#xff0c;相当于嵌入在代码中的补充信息。在 JavaSE 中&am…

OpenMMLab-AI实战营第二期——相关1. COCO数据集格式和pycocotools使用(目标检测方向)

文章目录 1. COCO数据集1.1 COCO数据集介绍1.2 COCO数据集格式1.2.1 常见目标检测数据格式1.2.2 COCO数据集文件结构及标注文件说明1.2.3 COCO的evaluation指标 1.3 其他 2. pycocotools2.1 pycocotools简介和安装2.2 基本使用 3. 图像的EXIF使用3.1 图像的EXIF3.1.1 基本介绍3…

车载以太网MACsec

车载以太网MACsec 1.概述 MACsec&#xff08;Media Access Control Security&#xff09;定义了基于 IEEE 802 局域网络的数据安全通信的方法。MACsec 可为用户提供安全的 MAC 层数据发送和接收服务&#xff0c;包括用户数据加密&#xff08;Confidentiality&#xff09;、数…