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.mzph.cn/news/229328.shtml

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

相关文章

一个 tomcat 下如何部署多个项目?附详细步骤

一个tomcat下如何部署多个项目&#xff1f;Linux跟windows系统下的步骤都差不多&#xff0c;以下linux系统下部署为例。windows系统下部署同理。 1 不修改端口&#xff0c;部署多个项目 清楚tomcat目录结构的应该都知道&#xff0c;项目包是放在webapps目录下的&#xff0c;那…

vue2 echarts不同角色多个类型数据的柱状图

前端代码&#xff1a; 先按照echarts插件。在页面里引用 import * as echarts from "echarts";设置div <div style"width:100%;height:250px;margin-top: 4px;" id"addressChart"></div>方法: addressEcharts() {const option {g…

RabbitMQ搭建集群环境、配置镜像集群、负载均衡

RabbitMQ集群搭建 Linux安装RabbitMQ下载安装基本操作命令开启管理界面及配置 RabbitMQ集群搭建确定rabbitmq安装目录启动第一个节点启动第二个节点停止命令创建集群查看集群集群管理 RabbitMQ镜像集群配置启用HA策略创建一个镜像队列测试镜像队列 负载均衡-HAProxy安装HAProxy…

【精选】计算机网络教程(第3章数据链路层)

目录 前言 第3章数据链路层 1、差错检测&#xff08;CRC&#xff09; 2、点对点协议&#xff08;了解应用场景&#xff09; 3、什么是碰撞域&#xff0c;什么是广播域 碰撞域&#xff08;Collision Domain&#xff09;&#xff1a; 广播域&#xff08;Broadcast Domain&a…

计算机组成原理学习(输入输出系统)

目录 输入输出系统&#xff08;i/o系统&#xff09; 一.现代计算机的结构 二.常见的&#xff08;I/O设备或者是外部设备&#xff09; ​ 三.主机如何与I/O设备进行交互 四.I/O控制方式简介 五.I/O系统的基本组成 输入输出系统&#xff08;i/o系统&#xff09; 一.现代计算…

一键安装下载3ds Max!别墅还是宫殿?3ds Max助你建造梦幻般的艺术建筑

不再浪费时间在网上寻找3ds Max的安装包了&#xff01;因为你所需要的一切都可以在这里找到&#xff01;作为一款全球领先的3D设计工具&#xff0c;3ds Max为创作者们带来了前所未有的便利和创作灵感。无论是建筑设计、影视特效还是游戏开发&#xff0c;3ds Max都能帮助你实现想…

C++——C++11(1)

时至今日&#xff0c;C标准已经到了C23&#xff0c;但是你要说哪一次提出的标准最经 典&#xff0c;那C11一定会被人提及&#xff0c;C11带来了数量可观的变化&#xff0c;其中包 含了约140个新特性&#xff0c;以及对C03标准中约600个缺陷的修正&#xff0c;这使得 C11更像是从…

一个神奇的Python库:Evidently,机器学习必备

Evidently 是一个面向数据科学家和机器学习工程师的开源 Python 库。它有助于评估、测试和监控从验证到生产的数据和 ML 模型。它适用于表格、文本数据和嵌入。 简介 Evidently 是一个开源的 Python 工具&#xff0c;旨在帮助构建对机器学习模型的监控&#xff0c;以确保它们的…

博客动态校验+静态校验二次开发方式

静态校验&#xff1a; 1&#xff1a;将需要静态校验的参数继承BaseReqeust类重写validate方法&#xff1a; 动态校验&#xff1a; 1&#xff1a;在需要校验的实现类上加&#xff1a; BizValidate注解 2&#xff1a;写一个校验类&#xff0c;方法命名规范为&#xff1a;需要校…

修改npm源码解决服务端渲染环境中localstorage报错read properties of undefined (reading getItem)

现象&#xff1a; 这个问题是直接指向了我使用的第三方库good-storage&#xff0c;这是一个对localStorage/sessionStorage做了简单封装的库&#xff0c;因为项目代码有一个缓存cache.ts有用到 原因分析&#xff1a; 从表象上看是storage对象找不到getItem方法&#xff0c; 但…

Android--Jetpack--数据库Room详解一

人生何须万种愁&#xff0c;千里云烟一笑收 一&#xff0c;定义 Room也是一个ORM框架&#xff0c;它在SQLite上提供了一个抽象层&#xff0c;屏蔽了部分底层的细节&#xff0c;使用对象对数据库进行操作&#xff0c;进行CRUD就像对象调用方法一样的简单。 二&#xff0c;角色介…

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

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

docker容器-compose单机容器编排

目录 yaml文件使用的注意事项 yaml文件的基本数据结构 docker-compose单机容器编排 docker-compose的常用命令 安装docker-compose docker-compose部署nginx nginx文件 yml文件 docker-compose创建镜像和容器 docker-compose构建lnmp nginx文件 mysql文件 php文件…

华为组播配置案例

igmp-snooping主要用于生成二层组播表项&#xff0c;防止交换机全部接口都发组播报文 PC端配置&#xff1a; 组播源配置&#xff1a; R1 interface GigabitEthernet0/0/0 ip address 10.0.0.1 255.255.255.0 pim dm interface GigabitEthernet0/0/1 ip address 192.168.0…

UE5 C++(三)— 基本用法(生命周期、日志、基础变量)

文章目录 生命周期日志打印Outlog打印屏幕打印 基础变量类型FString、FName 和 FText&#xff0c;三者之间的区别 基础数据类型打印 忘记说了每次在Vscode修改后C脚本后&#xff0c;需要编译一下脚本&#xff0c;为了方便我是点击这里编译脚本 生命周期 Actor 生命周期官方文档…

年底总结-基于战略落地的年度经营计划

到了年底&#xff0c;今年不管经济如何&#xff0c;形势多么不好&#xff0c;这个月也要结束2023年了&#xff0c;在这个阶段最关键的是做好今年的总结以及明年的计划。 总结是为了更好地做明年的计划和形势的预判。 借用数据表作为工具&#xff0c;科学理性地对自身公司的经…

基于Java+Swingt学生信息管理系统

基于JavaSwing学生信息管理系统 一、系统介绍二、功能展示四、其他系统实现五、获取源码 一、系统介绍 1.用户登陆&#xff1a;在帮助按钮处&#xff0c;可以查看登陆账号及密码&#xff1a; 账号admin,密码123456 在未输入的情况下&#xff0c;会提示用户名不能为空&#xff…

广受好评的开源基础大模型最全梳理,你最钟意哪一个?

2023 年即将过去。一年以来&#xff0c;各式各样的大模型争相发布。当 OpenAI 和谷歌等科技巨头正在角逐时&#xff0c;另一方「势力」悄然崛起 —— 开源。 开源模型受到的质疑一向不少。它们是否能像专有模型一样优秀&#xff1f;是否能够媲美专有模型的性能&#xff1f; 迄…

C#实现MQTT over WebSocket

如何在网页端实现MQTT消息的发布和订阅&#xff1f; 实现MQTT功能&#xff0c;可以发布和订阅主题通过WebSocket协议将MQTT消息转发给对应的网页端 带着这个实现思路&#xff0c;采用C#控制台程序实现MQTT服务端功能&#xff0c;web端可以直接使用websocket插件与服务端双向通…

第7章 排序

前言 在这一章&#xff0c;我们讨论数组元素的排序问题。为简单起见&#xff0c;假设在我们的例子中数组只包含整数&#xff0c;虽然更复杂的结构显然也是可能的。对于本章的大部分内容&#xff0c;我们还假设整个排序工作能够在主存中完成&#xff0c;因此&#xff0c;元素的个…