当前位置: 首页 > news >正文

【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这类反馈类子组件&#xff0c;需要将父组件的visible值传递子组件&#xff0c;并且再通过$emit将关闭弹窗的组件值传回父组件&#xff0c;同事子组件还需要监听父组件传递过来的visible的值&#xff0c;来驱动弹窗显示隐藏&#xff0c;很麻烦&am…...

LeetCode:2274. 不含特殊楼层的最大连续楼层数(排序 Java)

目录 2274. 不含特殊楼层的最大连续楼层数 题目描述&#xff1a; 实现代与解析&#xff1a; 排序 原理思路&#xff1a; 2274. 不含特殊楼层的最大连续楼层数 题目描述&#xff1a; Alice 管理着一家公司&#xff0c;并租用大楼的部分楼层作为办公空间。Alice 决定将一些…...

生成树之STP

STP目的 STP&#xff1a;生成树协议&#xff0c;旨在将一个环型网络结构修剪成一个树型的结构&#xff0c;达到防环的作用 STP的步骤 STP有如下几个步骤&#xff0c;选举出四种角色&#xff0c;共同构建起STP生成树 1、开启生成树的交换机&#xff0c;会互相发送BPDU 2、交换…...

音视频入门基础:MPEG2-PS专题(6)——FFmpeg源码中,获取PS流的视频信息的实现

一、引言 通过FFmpeg命令可以获取到PS文件/PS流的视频压缩编码格式、色彩格式&#xff08;像素格式&#xff09;、分辨率、帧率信息&#xff1a; ./ffmpeg -i XXX.ps 本文以H.264为例讲述FFmpeg到底是从哪个地方获取到这些视频信息的。 二、视频压缩编码格式 &#xff08;…...

深入解析HDFS:定义、架构、原理、应用场景及常用命令

引言 Hadoop分布式文件系统&#xff08;HDFS&#xff0c;Hadoop Distributed File System&#xff09;是Hadoop框架的核心组件之一&#xff0c;它提供了高可靠性、高可用性和高吞吐量的大规模数据存储和管理能力。本文将从HDFS的定义、架构、工作原理、应用场景以及常用命令等…...

Rust:运行调用 Lua 脚本

以下是一个Rust运行Lua脚本的简单例子&#xff1a; 首先&#xff0c;确保你的Rust项目中已经添加了rust-lua库的依赖。可以在Cargo.toml文件中添加以下内容&#xff1a; [dependencies] rust-lua "0.36" # 注意&#xff1a;版本号可能会更新&#xff0c;请根据实…...

PHP语言的数据库编程

PHP语言的数据库编程 引言 随着互联网的发展&#xff0c;各类网站和应用程序如雨后春笋般涌现&#xff0c;数据库作为它们数据存储和管理的核心&#xff0c;扮演着至关重要的角色。PHP作为一种流行的服务器端脚本语言&#xff0c;被广泛应用于Web开发。PHP不仅具有简单易学的…...

Formality:参数化设计的命名规则

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 在Formality中使用set_top命令设置一个容器的顶层设计(elaborate)时&#xff0c;一个参数化的设计&#xff08;或者说模块&#xff09;可能因为其参数覆盖而出现不同…...

xss-labs关卡记录8-14

第八关 还是常规方法&#xff0c;先上传我们常用的试试&#xff0c;onfocus <script> <a hrefjavascript:alert()> 查看源码发现&#xff0c;value这里应该是对我们的<>进行了 处理&#xff0c;然后在href这里&#xff0c;对常用的关键词进行了替换处理&…...

SPSS实现中介效应与调节效应

1. 中介效应 SPSS 实现 本例研究的自变量&#xff08;X&#xff09; “工作不被认同”&#xff1b;中介变量&#xff08;M&#xff09;为“焦虑”&#xff0c;因变量&#xff08;Y&#xff09;为“工作绩效”。探讨焦虑是否在工作不被认同与工作绩效间的作用。 &#xff08;2&…...

计算机的错误计算(二百零三)

摘要 利用两个大模型化简计算 其中一个大模型是数学解题器&#xff0c;它通过化简得出了正确结果&#xff1b;另外一个大模型给出了 Python代码。 例1. 化简计算摘要中算式。 下面是一个数学解题器大模型给的回答。 以上是数学解题器大模型给的回答。 下面是与另外一个大模型…...

【计算机网络】什么是AC和AP?

在现代的无线网络中&#xff0c;AC&#xff08;Access Controller&#xff0c;接入控制器&#xff09;和AP&#xff08;Access Point&#xff0c;无线接入点&#xff09;是两个至关重要的设备&#xff0c;它们在网络的管理、连接和优化中扮演着重要角色。理解它们的功能和区别&…...

python3中函数的参数

一. 简介 前面学习了Python3中函数的语法规则&#xff0c;文章如下&#xff1a; python3中函数的语法规则-CSDN博客 本文继续学习python中函数的参数。调用函数时可使用的正式参数类型&#xff1a; 必需参数&#xff0c;关键字参数&#xff0c;默认参数&#xff0c;不定长参…...

数据仓库建设方案和经验总结

在做数据集成的过程中&#xff0c;往往第二步的需求就是建设数仓由于数据分散在不同的存储环境或数据库中&#xff0c;对于新业务需求的开发需要人工先从不同的数据库中同步、集中、合并等处理&#xff0c;造成资源和人力的浪费。同时&#xff0c;目前的系统架构&#xff0c;无…...

Re77 读论文:LoRA: Low-Rank Adaptation of Large Language Models

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名&#xff1a;LoRA: Low-Rank Adaptation of Large Language Models ArXiv网址&#xff1a;https://arxiv.org/abs/2106.09685 官方GitHub网站&#xff08;包含在RoBERTa、DeBERTa、GPT-2上用Lora微调…...

曲波系数 curvelet transform

Curvelet 变换后的系数涵义 曲波变换&#xff08;Curvelet Transform&#xff09;是一种多尺度、多方向的变换工具&#xff0c;能够有效地表示信号中的几何特征&#xff08;如边缘、曲线等&#xff09;。曲波变换后的系数具有明确的物理意义&#xff0c;反映了信号在不同尺度、…...

OS的随机数生成过程中的内核熵池

内核熵池&#xff08;Kernel Entropy Pool&#xff09;是操作系统内核中用于收集和管理熵&#xff08;随机性来源&#xff09;的机制 &#xff0c;在操作系统的随机数生成过程中发挥关键作用。 以下从其原理、作用、工作方式方面详细介绍&#xff1a; 原理&#xff1a;熵在信…...

数据结构:双向循环链表

双向循环链表&#xff08;Doubly Circular Linked List&#xff09; 双向循环链表是双向链表的一种变体&#xff0c;其特点是链表的头节点和尾节点相连&#xff0c;形成一个闭环。这种结构允许在链表中进行无缝的双向遍历&#xff0c;并且由于循环特性&#xff0c;可以从任何节…...

IP网和传输网区别(以访问百度为例!)

1. IP网和传输网的关系 IP网&#xff1a;是基于IP协议的网络&#xff0c;负责数据的逻辑传输&#xff0c;包括数据包的路由、寻址和转发。IP网是“虚拟”的&#xff0c;它依赖于底层的传输网来实际传递数据。 传输网&#xff1a;是物理网络基础设施&#xff0c;负责数据的物理…...

STM32裸机开发转FreeRTOS教程

目录 1. 简介2. RTOS设置&#xff08;1&#xff09;分配内存&#xff08;2&#xff09;查看任务剩余空间&#xff08;3&#xff09;使用osDelay 3. 队列的使用&#xff08;1&#xff09;创建队列&#xff08;1&#xff09;直接传值和指针传值&#xff08;2&#xff09;发送/接收…...

如何用MelonLoader实现Unity游戏模组开发的终极跨平台方案

如何用MelonLoader实现Unity游戏模组开发的终极跨平台方案 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 你是否曾为Unity游戏…...

Kandinsky-5.0-I2V-Lite-5s开发入门:Anaconda虚拟环境配置与管理

Kandinsky-5.0-I2V-Lite-5s开发入门&#xff1a;Anaconda虚拟环境配置与管理 1. 为什么需要虚拟环境 在开始Kandinsky-5.0-I2V-Lite-5s这类AI项目开发前&#xff0c;有个问题经常困扰新手&#xff1a;为什么我的代码在别人电脑上能跑&#xff0c;在自己电脑上就报错&#xff…...

2007-2020 年税调与关键数字技术专利数据匹配结果

2007&#xff5e;2020 年税调与关键数字技术专利数据匹配结果 了避免数据过于庞大的问题&#xff0c;使用了三组文件存放这份数据。 第一组是税调与关键数字技术专利数据匹配结果&#xff0c;按年拆分&#xff0c;里面有newipzlid 变量&#xff08;每个 newipzlid 对应一个专…...

不上APM,103行代码搞定慢SQL检测:超100毫秒自动入库

不上APM&#xff0c;103行代码搞定慢SQL检测&#xff1a;超100毫秒自动入库 原创于 2026-04-14 06:40:21 发布更新于 2026-04-14 10:30:00 非科班野生程序员&#xff0c;深耕政务信息化20年。从VC到PB再到Java&#xff0c;自研框架browise也打磨了十几年。最近整理框架代码&…...

编程小白福音:Yi-Coder-1.5B帮你写Python/Java/JavaScript代码

编程小白福音&#xff1a;Yi-Coder-1.5B帮你写Python/Java/JavaScript代码 1. 引言&#xff1a;你的专属AI编程助手来了 还在为写不出代码而发愁吗&#xff1f;或者面对一个新项目&#xff0c;不知道从哪一行开始写起&#xff1f;如果你有这些困扰&#xff0c;那么今天介绍的…...

SpringBoot微服务集成Phi-4-mini-reasoning指南:构建智能业务逻辑层

SpringBoot微服务集成Phi-4-mini-reasoning指南&#xff1a;构建智能业务逻辑层 1. 引言 作为一名Java开发者&#xff0c;你是否遇到过这样的场景&#xff1a;业务逻辑越来越复杂&#xff0c;传统的规则引擎已经难以应对多变的业务需求&#xff1f;或者需要为系统添加智能决策…...

告别卡顿!用Android Studio Profiler揪出GPU性能瓶颈的保姆级实战

告别卡顿&#xff01;用Android Studio Profiler揪出GPU性能瓶颈的保姆级实战 当你在测试最新开发的3D游戏时&#xff0c;突然发现角色转身时画面明显卡顿&#xff1b;或者电商App在快速滑动商品列表时&#xff0c;出现了令人不悦的白帧闪烁。作为中高级Android开发者&#xff…...

告别R语言焦虑!Origin相关性热图深度对比:5种图形类型(Mix/Color/Text等)到底怎么选?

告别R语言焦虑&#xff01;Origin相关性热图深度对比&#xff1a;5种图形类型实战指南 当科研数据遇上多维变量分析&#xff0c;一张信息密度与视觉表达平衡的相关性热图往往能成为论文中的点睛之笔。不同于R语言需要代码基础的绘制方式&#xff0c;OriginPro的CorrelationPlot…...

TexLive极简安装法:5分钟搞定基础版+中英文支持(附磁盘空间不足解决方案)

TexLive极简安装法&#xff1a;5分钟搞定基础版中英文支持&#xff08;附磁盘空间不足解决方案&#xff09; 在学术写作和科研文档排版领域&#xff0c;LaTeX以其专业的排版质量和稳定性成为不可替代的工具。然而&#xff0c;传统的TexLive完整安装往往需要占用6GB以上的磁盘空…...

VGG16实战:用Perceptual Loss提升超分辨率图像细节(附代码对比)

VGG16实战&#xff1a;用Perceptual Loss提升超分辨率图像细节&#xff08;附代码对比&#xff09; 当你在深夜调试超分辨率模型时&#xff0c;是否也遇到过这样的困境&#xff1a;PSNR指标明明很高&#xff0c;但生成的图像却像被蒙上了一层薄雾&#xff0c;边缘模糊、纹理丢失…...