【vue3封装element-plus的反馈组件el-drawer、el-dialog】
vue2中封装el-drawer、el-dialog这类反馈类子组件,需要将父组件的visible值传递子组件,并且再通过$emit将关闭弹窗的组件值传回父组件,同事子组件还需要监听父组件传递过来的visible的值,来驱动弹窗显示隐藏,很麻烦,代码也比较臃肿,vue3中实现方案更加简洁、方便,本文主要示例讲解vue3封装element-plus的对话框、抽屉的实现方案,同时会将vue2的实现示例写出,来进行对比,这两个组件实现方案基本一致,顾放在一起说明
文章目录
- vue2封装示例
- el-dialog组件封装
- el-drawer组件封装
- vue3封装示例
- 子组件封装示例:
- 父组件调用:
- 结尾说明
vue2封装示例
el-drawer、el-dialog作为子组件的封装基本一致,将二者示例同时展示,主要是方便以后复制粘贴
el-dialog组件封装
父组件调用文件:
<template><div ><childDlg @updateVisible="updateVisible" :visible="changeVisible" /></div>
</template><script>
import childDlg from './childDlg .vue'
export default {components:{childDlg },data(){return {changeVisible:false//弹窗控制}},methods:{// 接收弹窗关闭updateVisible(val) {this.changeVisible= val}}</script>
子组件childDlg .vue弹窗封装文件
<template><div><el-dialog title="修改信息":visible.sync="checkDialog":before-close="closeReset":close-on-click-modal="false">弹窗展示</el-dialog></div>
</template><script>export default {props: {visible: {type: Boolean,default: false,}},computed: {checkDialog: {get() {return this.visible},set(val) {// 当visible改变的时候,触发父组件的 updateVisible方法,在该方法中更改传入子组件的 changeVisible的值this.$emit('updateVisible', val)},},}, watch:{visible(newVal){//可以执行异步if(newVal){this.openDialog()}}},methods:{openDialog(){//打开弹窗事件},closeReset(done) {//弹窗关闭this.checkDialog = false},}}
</script><style lang="scss" scoped></style>
el-drawer组件封装
父组件调用文件:
<template><div ><childDrawer @updateVisible="updateVisible" :visible="changeVisible" /></div>
</template><script>
import childDrawerfrom './childDrawer.vue'
export default {components:{childDrawer},data(){return {changeVisible:false//抽屉控制}},methods:{// 接收抽屉关闭updateVisible(val) {this.changeVisible= val}}</script> ```子组件childDrawer.vue弹窗封装文件```javascript
<template><div><el-drawertitle="修改信息":visible.sync="checkDialog":before-close="closeReset">抽屉展示</el-dialog></div>
</template><script>export default {props: {visible: {type: Boolean,default: false,}},computed: {checkDialog: {get() {return this.visible},set(val) {// 当visible改变的时候,触发父组件的 updateVisible方法,在该方法中更改传入子组件的 changeVisible的值this.$emit('updateVisible', val)},},}, watch:{visible(newVal){//可以执行异步if(newVal){this.openDialog()}}},methods:{openDialog(){//打开抽屉事件},closeReset(done) {//弹窗关闭this.checkDialog = false},}}
</script><style lang="scss" scoped></style>
vue3封装示例
这里主要以el-drawer为例说明,el-dialog组件会将代码块粘贴,二者使用上是完全一致的,当然vue3与vue2封装上的主要区别,在于vue3使用的< script setup >方式声明为了保证文件独立性,将组件进行了全封闭,换句话说,控制子组件的弹窗、抽屉的属性值需要在子组件内,而不是像vue2封装一样在父组件中,通过父组件值的true或者false来控制弹窗显示隐藏,那如此要解决的最主要的问题就是如何“点击父组件的按钮让子组件弹出来”
这里会用到新属性:defineExpose()方法,官方描述:使用 <script setup> 的组件是默认关闭的——即通过模板引用或者 $parent 链获取到的组件的公开实例,不会暴露任何在 <script setup> 中声明的绑定。可以通过 defineExpose 编译器宏来显式指定在 <script setup> 组件中要暴露出去的属性
示例:
<script setup>
import { ref } from 'vue'const a = 1
const b = ref(2)defineExpose({a,b
})
</script>
当父组件通过模板引用的方式获取到当前组件的实例,获取到的实例会像这样 { a: number, b: number } (ref 会和在普通实例中一样被自动解包)
文档地址:vue3–defineExpose()
子组件封装示例:
说明:在子组件中声明关闭与打开方法:open()与close()用于修改控制抽屉开关的值drawer,以方便父组件调取
drawerChild.vue文件
<template><el-drawer v-model="drawer"title="抽屉标题"><span>抽屉内容</span></el-drawer>
</template><script setup>
const drawer = ref(false)
function open() {drawer.value = true
}
function close() {drawer.value = false
}
defineExpose({open,close,
})
</script><style lang="scss" scoped>
</style>
父组件调用:
<!-- 抽屉 --><el-button @click="openDrawer">打开抽屉</el-button><drawer-child ref="drawerChildRef" />
<script setup>
import drawerChildfrom './drawerChild.vue'const drawerChildRef= ref(null) //抽屉reffunction openDrawer() {drawerChildRef.value.open()
}
除此之外,相关的父子组件传值还是可以继续使用Props、emit来实现的
difineProps:子组件接收父组件传过来的值。
difineEmits: 子组件接收父组件传过来的方法。
这里不做过多演示
结尾说明
从代码简洁度,逻辑条理性上无疑vue3相对于vue2都是更胜一筹的,vue3本身还有很多非常优秀的api创新,建议多阅读官方文档:vue3官方文档
接下来把el-dialog封装也贴一下,方便日后复制粘贴
<template><el-dialog v-model="dialogVisible"title="弹窗标题"><span>弹窗内容</span><template #footer><div class="dialog-footer"><el-button @click="dialogVisible = false">取消</el-button><el-button type="primary"@click="dialogVisible = false">确定</el-button></div></template></el-dialog>
</template><script setup>
const dialogVisible = ref(false)
function open() {dialogVisible.value = true
}
function close() {dialogVisible.value = false
}
defineExpose({open,close,
})
</script><style lang="scss" scoped>
</style>
相关文章:
【vue3封装element-plus的反馈组件el-drawer、el-dialog】
vue2中封装el-drawer、el-dialog这类反馈类子组件,需要将父组件的visible值传递子组件,并且再通过$emit将关闭弹窗的组件值传回父组件,同事子组件还需要监听父组件传递过来的visible的值,来驱动弹窗显示隐藏,很麻烦&am…...
LeetCode:2274. 不含特殊楼层的最大连续楼层数(排序 Java)
目录 2274. 不含特殊楼层的最大连续楼层数 题目描述: 实现代与解析: 排序 原理思路: 2274. 不含特殊楼层的最大连续楼层数 题目描述: Alice 管理着一家公司,并租用大楼的部分楼层作为办公空间。Alice 决定将一些…...
生成树之STP
STP目的 STP:生成树协议,旨在将一个环型网络结构修剪成一个树型的结构,达到防环的作用 STP的步骤 STP有如下几个步骤,选举出四种角色,共同构建起STP生成树 1、开启生成树的交换机,会互相发送BPDU 2、交换…...
音视频入门基础:MPEG2-PS专题(6)——FFmpeg源码中,获取PS流的视频信息的实现
一、引言 通过FFmpeg命令可以获取到PS文件/PS流的视频压缩编码格式、色彩格式(像素格式)、分辨率、帧率信息: ./ffmpeg -i XXX.ps 本文以H.264为例讲述FFmpeg到底是从哪个地方获取到这些视频信息的。 二、视频压缩编码格式 (…...
深入解析HDFS:定义、架构、原理、应用场景及常用命令
引言 Hadoop分布式文件系统(HDFS,Hadoop Distributed File System)是Hadoop框架的核心组件之一,它提供了高可靠性、高可用性和高吞吐量的大规模数据存储和管理能力。本文将从HDFS的定义、架构、工作原理、应用场景以及常用命令等…...
Rust:运行调用 Lua 脚本
以下是一个Rust运行Lua脚本的简单例子: 首先,确保你的Rust项目中已经添加了rust-lua库的依赖。可以在Cargo.toml文件中添加以下内容: [dependencies] rust-lua "0.36" # 注意:版本号可能会更新,请根据实…...
PHP语言的数据库编程
PHP语言的数据库编程 引言 随着互联网的发展,各类网站和应用程序如雨后春笋般涌现,数据库作为它们数据存储和管理的核心,扮演着至关重要的角色。PHP作为一种流行的服务器端脚本语言,被广泛应用于Web开发。PHP不仅具有简单易学的…...
Formality:参数化设计的命名规则
相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 在Formality中使用set_top命令设置一个容器的顶层设计(elaborate)时,一个参数化的设计(或者说模块)可能因为其参数覆盖而出现不同…...
xss-labs关卡记录8-14
第八关 还是常规方法,先上传我们常用的试试,onfocus <script> <a hrefjavascript:alert()> 查看源码发现,value这里应该是对我们的<>进行了 处理,然后在href这里,对常用的关键词进行了替换处理&…...
SPSS实现中介效应与调节效应
1. 中介效应 SPSS 实现 本例研究的自变量(X) “工作不被认同”;中介变量(M)为“焦虑”,因变量(Y)为“工作绩效”。探讨焦虑是否在工作不被认同与工作绩效间的作用。 (2&…...
计算机的错误计算(二百零三)
摘要 利用两个大模型化简计算 其中一个大模型是数学解题器,它通过化简得出了正确结果;另外一个大模型给出了 Python代码。 例1. 化简计算摘要中算式。 下面是一个数学解题器大模型给的回答。 以上是数学解题器大模型给的回答。 下面是与另外一个大模型…...
【计算机网络】什么是AC和AP?
在现代的无线网络中,AC(Access Controller,接入控制器)和AP(Access Point,无线接入点)是两个至关重要的设备,它们在网络的管理、连接和优化中扮演着重要角色。理解它们的功能和区别&…...
python3中函数的参数
一. 简介 前面学习了Python3中函数的语法规则,文章如下: python3中函数的语法规则-CSDN博客 本文继续学习python中函数的参数。调用函数时可使用的正式参数类型: 必需参数,关键字参数,默认参数,不定长参…...
数据仓库建设方案和经验总结
在做数据集成的过程中,往往第二步的需求就是建设数仓由于数据分散在不同的存储环境或数据库中,对于新业务需求的开发需要人工先从不同的数据库中同步、集中、合并等处理,造成资源和人力的浪费。同时,目前的系统架构,无…...
Re77 读论文:LoRA: Low-Rank Adaptation of Large Language Models
诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名:LoRA: Low-Rank Adaptation of Large Language Models ArXiv网址:https://arxiv.org/abs/2106.09685 官方GitHub网站(包含在RoBERTa、DeBERTa、GPT-2上用Lora微调…...
曲波系数 curvelet transform
Curvelet 变换后的系数涵义 曲波变换(Curvelet Transform)是一种多尺度、多方向的变换工具,能够有效地表示信号中的几何特征(如边缘、曲线等)。曲波变换后的系数具有明确的物理意义,反映了信号在不同尺度、…...
OS的随机数生成过程中的内核熵池
内核熵池(Kernel Entropy Pool)是操作系统内核中用于收集和管理熵(随机性来源)的机制 ,在操作系统的随机数生成过程中发挥关键作用。 以下从其原理、作用、工作方式方面详细介绍: 原理:熵在信…...
数据结构:双向循环链表
双向循环链表(Doubly Circular Linked List) 双向循环链表是双向链表的一种变体,其特点是链表的头节点和尾节点相连,形成一个闭环。这种结构允许在链表中进行无缝的双向遍历,并且由于循环特性,可以从任何节…...
IP网和传输网区别(以访问百度为例!)
1. IP网和传输网的关系 IP网:是基于IP协议的网络,负责数据的逻辑传输,包括数据包的路由、寻址和转发。IP网是“虚拟”的,它依赖于底层的传输网来实际传递数据。 传输网:是物理网络基础设施,负责数据的物理…...
STM32裸机开发转FreeRTOS教程
目录 1. 简介2. RTOS设置(1)分配内存(2)查看任务剩余空间(3)使用osDelay 3. 队列的使用(1)创建队列(1)直接传值和指针传值(2)发送/接收…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
