vue3 使用element-plus 如何再次封装table组件

• vue3 使用element-plus 如何再次封装table组件

• 基本步骤

• 创建子组件:

• 默认数据配置

• 在需要使用自定义 Table 组件的地方引入并使用:

创建子组件:

创建一个新的 .vue 文件,例如子组件 baseTable.vue,作为你封装后的 Table 组件。

 <template><div class="base-table-wrapper"><el-table :data="tableData" style="width: 100%"><template v-for="item in column" :key="item.prop"><el-table-column :prop="item.prop" :label="item.label" :width="item.width"><template #default="scope" v-if="!!item.isScope"><slot :name="item.prop+'ScopeContent'" :row="scope.row" /></template> </el-table-column></template></el-table></div>
</template><script setup>const props = defineProps({column: {type: Array,default() {return []}},tableData: {type: Array,default() {return []}},
})</script><style lang="scss" scoped></style>

在需要使用自定义 Table 组件的地方引入并使用:

<template>
<base-table :column="tableColumn" :tableData="recordList"> <!-- 刷卡时间自定义内容 --><template #createTimeScopeContent="slotProps" > <span>{{ parseTime(slotProps.row.eventTime) }}</span></template> <!-- // 刷卡时间自定义内容 --><!-- 事件自定义内容 --><template #typeScopeContent="slotProps" >  <dict-tag :options="entrance_type" :value="slotProps.row.event" /></template><!-- // 事件自定义内容 --> <!-- 部门自定义内容 --><template #deptNameScopeContent="slotProps" >  <span>{{ slotProps.row.deptName || "无" }}</span> </template><!-- // 部门自定义内容 -->  <!-- 刷卡地点自定义内容 --><template #controllerNameScopeContent="slotProps" > <dict-tag :options="controller_name" :value="slotProps.row.controllerName" /></template><!-- // 刷卡地点自定义内容 --> 
</base-table> 
</template><script setup>
const tableColumn = ref([{label: "刷卡时间",prop: "createTime",width: "180",align: "center",isScope: true}, {label: "事件",prop: "type",width: "auto",align: "center",isScope: true}, {label: "姓名",prop: "staffName",width: "auto",align: "center"}, {label: "卡号",prop: "cardNo",width: "auto",align: "center"}, {label: "部门",prop: "deptName",width: "auto",align: "center",isScope: true}, {label: "刷卡地点",prop: "controllerName",width: "auto",align: "center",isScope: true}
])
</script>

在 Vue 3 中,你可能会遇到“具名插槽”(Named Slots)的概念,它允许你在组件内部定义特定的插槽位置,并在父组件中为这些具名插槽提供内容。

以下是如何在Vue 3中使用具名插槽的一个基本示例:

  1. 首先,在子组件(ChildComponent.vue)中定义一个具名插槽:
<template><div><h2>这是子组件的标题</h2><slot name="description">默认描述内容</slot><slot name="footer">默认页脚内容</slot></div>
</template>

在这个例子中,我们定义了两个具名插槽:description 和 footer,并且都提供了默认内容。

  1. 然后,在父组件中使用这个子组件并填充具名插槽:
<template><ChildComponent><template v-slot:description><p>这是来自父组件的描述内容</p></template><template v-slot:footer><p>这是来自父组件的页脚内容</p></template></ChildComponent>
</template>

在父组件中,我们使用 v-slot 指令(也可以简写为 #)来指定要填充哪个具名插槽,并在其中提供相应的内容。这样,当渲染子组件时,就会在对应的位置插入这些内容。

vue3 使用具名插槽并且传递值

在 Vue 3 中,具名插槽不仅可以用于传递 HTML 结构,还可以配合作用域插槽(Scoped Slots)来传递数据。作用域插槽允许子组件向其插槽内传递数据,而父组件则可以通过插槽提供的回调函数来访问这些数据并在插槽内进行渲染。

下面是一个使用 Vue 3 中具名插槽结合作用域插槽传递值的例子:

子组件 (ChildComponent.vue):

<template><div><h2>这是子组件的数据列表</h2><!-- 定义作用域插槽,传入一个数组 --><ul><li v-for="item in items" :key="item.id"><slot :item="item" name="listItem"></slot></li></ul></div>
</template><script>
export default {data() {return {items: [{ id: 1, text: '第一条数据' },{ id: 2, text: '第二条数据' },// ...]}}
}
</script>

父组件:

<template><ChildComponent><!-- 使用 v-slot 指令接收子组件传递的 item 数据 --><template #listItem="slotProps"><div><p>ID: {{ slotProps.item.id }}</p><p>内容: {{ slotProps.item.text }}</p><!-- 这里可以根据 item 数据自定义渲染内容 --></div></template></ChildComponent>
</template>

在上述例子中,子组件 ChildComponent 定义了一个具名插槽 listItem 并且每个插槽都绑定了一个 item 数据。

在父组件中,我们通过 v-slot:listItem=“slotProps” 来接收这些数据,并通过 slotProps.item 访问具体的 item 对象属性。这样父组件就可以根据传递过来的数据自行决定如何渲染每一项列表内容了。

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

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

相关文章

Linux安装Nacos

安装前必要准备 准备Java环境 &#xff0c;8以上的版本&#xff0c;mysql&#xff08;集群相关信息&#xff09;&#xff0c;nginx&#xff08;进行代理&#xff09; 安装Nacos 首先我们要有一个nacos的包&#xff0c;我们可以在线下载&#xff0c;也可以提前下载好&#xf…

从HTTP到QUIC:网络协议的演进与优化

文章目录 1. HTTP&#xff08;超文本传输协议&#xff09;2. HTTP/1.1&#xff1a;性能优化与持久连接3. HTTP/2&#xff1a;多路复用与性能进一步提升4. QUIC&#xff1a;基于UDP的低延迟传输协议5. HTTP/3&#xff1a;基于QUIC的下一代HTTP协议6. QUIC的IETF标准化进程7. 新兴…

Nginx 全局块配置 worker 进程的两个指令

1. 前言 熟悉 nginx 运行原理的都知道&#xff0c;nginx 服务启动后&#xff0c;会有一个 master 进程和多个 worker 进程&#xff0c;master 进程负责管理所有的 worker 进程&#xff0c;worker 进程负责处理和接收用户请求 在这里我们所要研究的是 master 进程一定要创建 wo…

c语言管理课程信息系统

定制魏:QTWZPW,获取更多源码等 目录 题目要求 数据结构 函数设计 结构设计 管理员功能: 学生功能: 效果展示 总结 主函数代码 题目要求 管理课程信息系统,允许管理员和学生执行不同的操作。管理员可以添加、浏览、查询、删除、修改和排序课程信息。学生可以…

如何进行设备的非对称性能测试

非对称性能测试介绍 RFC2544是RFC组织提出的用于评测网络互联设备&#xff08;防火墙、IDS、Switch等&#xff09;的国际标准。主要是对RFC1242中定义的性能评测参数的具体测试方法、结果的提交形式作了较详细的规定。标准中定义了4个重要的参数&#xff1a;吞吐量&#xff08…

HashMap是Java中常用的键值对存储容器,以下是HashMap类的一些常用方法:

put(key, value)&#xff1a;将指定的键值对存储到HashMap中&#xff0c;如果该键已经存在&#xff0c;则会更新对应的值。 HashMap<String, Integer> map new HashMap<>(); map.put("apple", 10); map.put("banana", 5);get(key)&#xff1a…

Uni-app/Vue/Js本地模糊查询,匹配所有字段includes和some方法结合使用e

天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 1.第一步 需要一个数组数据 {"week": "全部","hOutName": null,"weekendPrice": null,"channel": "门市价","hOutId": 98,"cTime": "…

度小满校招后端研发第2批编程题Java题解

1、坚强的小昆虫 由于新冠肺炎疫情的爆发&#xff0c;小明养在宿舍的小昆虫已经很久很久都没有人管了。小昆虫已经饿的不行了&#xff0c;必须出来找东西吃&#xff0c;可是出来之后需 要走出一个迷宫。小昆虫每次可以朝上、下、左、右四个方向之一走一步&#xff0c;且只要走…

打造新质生产力,亚信科技2024年如何行稳致远?

引言&#xff1a;不冒进、不激进&#xff0c;稳扎稳打&#xff0c; 一个行业一个行业地深度拓展。 【全球云观察 &#xff5c; 科技热点关注】 基于以往“一巩固、三发展”的多年业务战略&#xff0c;亚信科技正在落实向非通信行业、标准产品、软硬一体产品和国际市场的“四…

无人机群全局一致性后端优化

视觉全局一致性 目的&#xff1a;不同无人机看到同一个路标点时&#xff0c;可以构建重投影误差来优化位姿 重点学习参考vins前端图像跟踪 双目模式vins VIO 入口为rosNodeTest.cpp&#xff0c;首先利用sync_process()中先读取配置文件&#xff0c;再调用estimator.inputIma…

Flink Temporal Join 系列 (1):用 Temporal Table DDL 实现基于事件时间的关联

本文要演示的是:使用 Temporal Table DDL 定义被关联表(维表),然后基于主动关联表(事实表)的“事件时间”去进行Temporal Join(关联时间维度上对应版本的维表数据)。该演示涉及三个要点: 被关联的表(维表)是用 Temporal Table DDL 形式定义,必须是一张时态表(版本…

FM索引的保存和加载

在SDSL库中构建的FM索引可以保存到磁盘上以便以后加载和重用。SDSL提供了一些方法来实现这一点。你可以使用serialize()函数将FM索引对象序列化为二进制格式,并将其写入文件中。然后,你可以使用load()函数来从文件中加载并重新构建FM索引对象。 #include <iostream> #…

Java-Java基础学习(5)-注解和反射以及类的加载过程分析

4.1 注解的理解 Annotation是从JDK5.0开始引入的新技术 Annotation的作用 不是程序本身&#xff0c;可以对程序作出解释&#xff08;这点和注释comment没什么区别&#xff09;&#xff1b;可以被其他程序&#xff08;比如&#xff1a;编译器等&#xff09;读取&#xff1b; A…

00X基于Jetson Nano+yolov4-tiny的目标检测

本节将详细介绍如何在Jetson Nano平台上搭建基于YoloV4-tiny模型的对象检测系统。 说在最前面&#xff0c;本篇文档的许多内容来自多篇技术文档&#xff0c;我只是结合自己的学习经历&#xff0c;进行了加工和组合 1.1 Why Yolo V4-tiny&#xff1f; 在介绍具体内容之前&…

Spring异步注解@Async线程池配置

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 从Spring3开始提供了@Async注解,该注解可以被标注在方法上,以便异步地调…

多段智能功率分配,双设备同时快充,乐得瑞LDR6020 一分拖二PD 快充线方案

随着移动设备的普及和功能的日益增强&#xff0c;电池续航成为了用户关注的重点之一。为了满足用户对于快速充电的需求&#xff0c;各大厂商纷纷推出了各种快充技术和产品。在这个背景下&#xff0c;乐得瑞公司推出了一款名为LDR6020的一分二PD快充线方案&#xff0c;该方案采用…

处理登录失效后提示多个错误

问题: 我的场景是后端规定&#xff0c;即使登录失效返回的code仍是200&#xff0c;然后data的code是999什么的&#xff1b; 原本代码&#xff1a; 修改版代码&#xff1a; 通过节 const NotLoginEvent () > {router.replace("/login");localStorage.clear();M…

想学Solidworks二次开发进来看下

序号标题1H1&#xff1a;Solidworks二次开发简介2H2&#xff1a;Solidworks的基础了解3H3&#xff1a;什么是Solidworks二次开发&#xff1f;4H3&#xff1a;为什么选择Solidworks二次开发&#xff1f;5H2&#xff1a;Solidworks二次开发的优势6H3&#xff1a;提高生产效率7H3&…

【PyTorch】解决PyTorch安装中torch.cuda.is_available()返回False的问题

最近在安装PyTorch时遇到torch.cuda.is_available() False的问题&#xff0c;特此记录下解决方法&#xff0c;以帮助其他遇到相同问题的人。 问题描述 Ubuntu 20.04&#xff0c;3060 Laptop&#xff0c;安装了CUDA 11.4&#xff0c;在Anaconda下新建了Python 3.8的环境&…

websocket上传大文件导致连接端开,上送失败解决方案

出现原因&#xff0c; 首先web端与服务端进行websocket连接&#xff0c;服务端给设备下发指令&#xff0c;设备给服务器上送文件&#xff0c;然后服务端通过websocket给web端上送&#xff0c;但是发现终端上送的小文件通过websocket给web端上送&#xff0c;但是大文件会导致we…