Vue中插槽的使用

目录

一、默认插槽

(1)概念

(2)代码展示

(3)后备内容

二、具名插槽

(1)概念

(2)代码展示

三、作用域插槽

        (1)概念

         (2)使用步骤

(3)用例展示


一、默认插槽

(1)概念

插槽究竟是什么呢?简单来说插槽就是用于决定将所携带的内容,插入到指定的某个位置。举个例子,比如说下面的图:

加入头部和底部都是写死的,但是我们希望主题部分不写死,那么这时候我们就需要用插槽了,也就是说插槽的作用就是让组件内部的一些结构支持自定义。

(2)代码展示

//fa.vue  子组件
<template><div class="fa"><div class="header" style="border: 1px solid black;width: 200px; height: 200px;">  <h1>我是头部</h1></div><div class="main" style="border: 1px solid red; width: 200px; height: 200px;"><!-- 通过slot标签作为展示 --><slot></slot></div><div class="footer" style="border: 1px solid blue; width: 200px; height: 200px;"><hr><h1>我是底部</h1></div></div>
</template>
//父组件  App.vue<script setup>
import fa from './components/fa.vue';
</script><template><fa>我是动态插槽----</fa></template><style scoped></style>

(3)后备内容

封装组件时,可以为预留的<slot>插槽提供后备内容(默认内容)。

效果:

外部使用组件时,不传东西,则slot会显示后备内容

外部如果使用组件,传东西,则slot整体会被换掉,显示传的东西。

 <div class="main" style="border: 1px solid red; width: 200px; height: 200px;"><!-- 通过slot标签作为展示 --><slot><p>不传东西就显示我</p></slot></div>

二、具名插槽

(1)概念

与前面的默认插槽的作用也是一样的,不过具名具名,就是具有名字的插槽,起名字自然就是为了辨别是哪一个,也就是说一个组件内有多处结构,需要外部传入标签进行定制。

如下图的场景:

这次我想让头部主体和底部三部分都可以动态展示。

(2)代码展示

//App.vue   父组件<template><fa><!-- 通过template配合,名字对应着标签,#head是简写,完整写法是:v-slot:head --><template #head>我是头部</template>
<template #main>
我是中间的
</template>
<template #footer>我是下面的底部
</template></fa></template>
//fa.vue   子组件<template><div class="fa"><div class="header" style="border: 1px solid black;width: 200px; height: 100px;">  <!-- 多个slot使用name属性区分名字 --><slot name="head"></slot></div><div class="main" style="border: 1px solid red; width: 200px; height: 100px;"><!-- 通过slot标签作为展示 --><slot name="main"></slot></div><div class="footer" style="border: 1px solid blue; width: 200px; height: 100px;"><slot name="footer"></slot></div></div>
</template><script setup></script><style></style>

三、作用域插槽

(1)概念

其实如果将插槽分类的话,插槽只分成两种,分别是默认插槽和具名插槽,作用域插槽并不在其中。

作用域插槽就是在定义slot插槽的同时,它是可以传值的,给插槽绑定数据,将来使用组件时可以用(父传子)。

(2)使用步骤

(1)给slot标签,以添加属性的方式传值

<slot :id=item.id msg='测试'></slot>

(2)所有添加的属性都会被收集到一个对象中

{
id:3,
msg:'测试'
}

(3)在template中,通过'#插槽名=obj'接收,默认插槽名为default

 <fa :list="list"><template #default="obj"><button @click=del(obj.id)>删除</button></template>
</fa>

(3)用例展示

需求:创建一个表格,对表格每一行数据都可以进行删除,根据他的id值

//App.vue<script setup>
import fa from './components/fa.vue';import { ref } from 'vue'
const list=ref([{id:1,name:'张三',age:19},{id:2,name:'王五',age:28},{id:3,name:'赵楼',age:21},{id:4,name:'宋以',age:31},{id:5,name:'石头',age:16}
])const del=(id)=>{console.log(id)//删除操作就是简单的数组过滤list.value=list.value.filter(i=>i.id!=id)
}
</script><template><fa :list="list"><template #default="obj">这个是={{ obj.msg }}<button @click="del(obj.obj.id)">删除</button></template></fa></template><style scoped></style>

//fa.vue<template><div class="fa"><table style="border: 1px solid black;width: 500px;height: 500px;text-align: center; border-collapse: collapse;"><thead><td>序号</td><td>id</td><td>name</td><td>age</td><td>操作</td></thead><tbody><tr v-for="(item,index) in list" :key="item.id"><td>{{ index }}</td><td>{{ item.id }}</td><td>{{ item.name }}</td><td>{{ item.age }}</td><!-- 特殊定制,使用插槽占位 --><td><!-- 传递数据,以对象的形式来接收,比如下面的数据接收是{obj:{id:1,name:.......}msg:'测试'} --><slot :obj="item" msg="测试"></slot></td></tr></tbody></table><div>{{ list }}</div></div>
</template><script setup>const props=defineProps({list:Array
})
console.log('子组件')
console.log(props.list)
</script><style>
td,tr{border:1px solid black;
}</style>

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

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

相关文章

GoWin FPGA, GPIO--- startup1

一个Bank只能用一个电压&#xff0c;假如同一个Bank&#xff0c;在引脚里设置不同的电压&#xff0c;编译不过。 解释说明 2. 错误引脚限制 以上编译设置会导致编译错误。

LeedCode刷题---滑动窗口问题(二)

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、将X减到0的最小操作数 题目链接&#xff1a;将 x 减到 0 的最小操作数 题目描述 给你一个整数数组 nums 和一个整数 x 。每一…

教师如何维护学生的自尊心

作为教师&#xff0c;我们不仅要传授知识&#xff0c;更要关心学生的身心健康&#xff0c;特别是他们的自尊心。自尊心是个人自我价值的重要体现&#xff0c;对学生的学习、生活和未来的发展都有深远的影响。因此&#xff0c;维护学生的自尊心是教师的重要责任。 教师要尊重每…

leetcode-138-随机链表的复制(Java实现)

题目&#xff1a; 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点…

基于YOLOv8深度学习的路面标志线检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

【vtkWidgetRepresentation】第十三期 VTKCaptionRepresentation

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享三维建模中的文字标注,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 目录 前言 1. vtkCaptionRepresentation

Apache SeaTunne简介

Apache SeaTunne简介 文章目录 1.Apache SeaTunne是什么&#xff1f;1.1[官网](https://seatunnel.apache.org/)1.2 项目地址 2.架构3.特性3.1 丰富且可扩展的连接器和插件机制3.2 支持分布式快照算法以确保数据一致性3.3 支持流、批数据处理&#xff0c;支持全量、增量和实时数…

破译模式:模式识别在计算机视觉中的作用

一、介绍 在当代数字领域&#xff0c;计算机视觉中的模式识别是关键的基石&#xff0c;推动着众多技术进步和应用。本文探讨了计算机视觉中模式识别的本质、方法、应用、挑战和未来趋势。通过使机器能够识别和解释视觉数据中的模式&#xff0c;模式识别不仅推动了计算机视觉领域…

[Verilog] Verilog 数值表示

主页&#xff1a; 元存储博客 文章目录 前言1. 整数表示1.1 整数数据类型1.2 整数转换函数 2. 负数表示3. 实数表示4. 逻辑电平表示5. 逻辑值表示6. 字符表示法7. 字符串表示 前言 Verilog中&#xff0c;可以使用多种方式表示数值。 1. 整数表示 1.1 整数数据类型 基数格式…

【深度学习目标检测】四、基于深度学习的抽烟识别(python,yolov8)

YOLOv8是一种物体检测算法&#xff0c;是YOLO系列算法的最新版本。 YOLO&#xff08;You Only Look Once&#xff09;是一种实时物体检测算法&#xff0c;其优势在于快速且准确的检测结果。YOLOv8在之前的版本基础上进行了一系列改进和优化&#xff0c;提高了检测速度和准确性。…

信号量机制理论详解专题

一文学懂信号量机制的各种大题&#xff0c;详细操作见下文~ 1965年&#xff0c;荷兰学者Dijkstra提出的信号量&#xff08;Semaphores&#xff09;机制是一种卓有成效的进程同步工具。在长期且广泛的应用中&#xff0c;信号量机制又得到了很大的发展&#xff0c;它从整型信号量…

网络基础(十一):VRRP原理与配置

目录 前言&#xff1a; 1、VRRP的基本概述 2、VRRP的基本原理 2.1VRRP的基本结构 2.2设备类型 2.3状态机 2.4VRRP路由器的抢占功能 2.5VRRP路由器的优先级 2.6VRRP工作原理 2.7主备路由器的工作内容 3、VRRP的基本配置 3.1配置主路由器和备用路由器 3.2配置PC1与P…