element-plus弹窗二次封装踩坑

1 基于element-plus的二次封装弹窗很常见。代码如下:

父组件:

import Dialog from './components/Dialogs/testDailog.vue'const show=ref(false)
const openDialog=()=>{show.value=true}<button @click="openDialog" >打开dialoag</button>
<Dialog   v-model="show"/>

弹窗的内容:

<template><el-dialogv-model="visible"title="Tips"width="30%"@close="handerClose"><P>This is a message</P><P>This is a message</P><P>This is a message</P><P>This is a message</P><P>This is a message</P><P>This is a message</P><P>This is a message</P><el-button @click="cancel">取消</el-button><el-button @click="confirm">确定</el-button></el-dialog>
</template><script setup lang='ts'>import { ref, reactive, watch, onMounted, onUnmounted } from 'vue'const emits=defineEmits(['close','confirm','update:modelValue'])const props=defineProps({modelValue:{type:Boolean,default:false}
})
const visible=ref(false)const cancel=()=>{emits('update:modelValue',false)
}
const confirm=()=>{emits('update:modelValue',false)
}const handerClose=()=>{console.log("点击关闭按钮");emits('update:modelValue',false)
}watch(()=>props.modelValue,(newVal)=>{visible.value=newVal;console.log("props.modelValue",props.modelValue);emits('update:modelValue',newVal)
})</script><style lang='scss' scoped></style>

到这基本上就可以实现了。这一版的特点就是弹窗的关闭时其实本身没有销毁。我们是通过双向绑定跟新了弹窗的状态

但是我们考虑一个场景,就是表单弹窗复用。新增和编辑态我们要做区分。这时候我们手动传属性标识是编辑还是新增就很麻烦。有一个简单的办法就是我们在关闭弹窗时直接把它销毁,这样每次我们只需要在生命周期的onMounted中判断是否有id传过来就可以了。如果有id则说明是编辑态。否则是新增的场景。这样就很容易区分。我们改造下代码:

改进版

销毁弹窗我们通过v-if来控制

父组件<button @click="openDialog" >打开dialoag</button><Dialog  v-if="show" v-model="show"/>
//注意这里增加了v-if
弹窗组件
<template><el-dialogv-model="visible"title="Tips"width="30%"@close="handerClose"><P>This is a message</P><P>This is a message</P><P>This is a message</P><P>This is a message</P><P>This is a message</P><P>This is a message</P><P>This is a message</P><el-button @click="cancel">取消</el-button><el-button @click="confirm">确定</el-button></el-dialog>
</template><script setup lang='ts'>import { ref, reactive, watch, onMounted, onUnmounted } from 'vue'const emits=defineEmits(['close','confirm','update:modelValue'])const props=defineProps({modelValue:{type:Boolean,default:false}
})
const visible=ref(props.modelValue)const cancel=()=>{emits('update:modelValue',false)
}
const confirm=()=>{emits('update:modelValue',false)
}const handerClose=()=>{console.log("点击关闭按钮");emits('update:modelValue',false)
}onMounted(()=>{console.log("挂载");
})onUnmounted(()=>{console.log("卸载");
})
watch(()=>props.modelValue,(newVal)=>{visible.value=newVal;console.log("props.modelValue",props.modelValue);emits('update:modelValue',newVal)
})</script><style lang='scss' scoped></style>

在组件内部,我们通过定义visible,初始状态和props.modelValue绑定,后续跟新在watch里同步,这样就可以实现每次销毁和挂载

注意:

const visible=ref(props.modalValue),定义visible的时候一定要先和props.modalValue进行绑定。不然父组件点击不会弹出来

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

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

相关文章

【大模型】深度解析 NLP 模型5大评估指标及 应用案例:从 BLEU、ROUGE、PPL 到METEOR、BERTScore

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;无论是机器翻译、文本生成&#xff0c;还是问答系统开发&#xff0c;模型性能评估指标始终是开发者绕不开的工具。BLEU、ROUGE、PPL&#xff08;困惑度&#xff09;、METEOR 和 BERTScore 是五个最具代表性的指标&am…

黑马程序员Java项目实战《苍穹外卖》Day01

苍穹外卖-day01 课程内容 软件开发整体介绍苍穹外卖项目介绍开发环境搭建导入接口文档Swagger 项目整体效果展示&#xff1a; ​ 管理端-外卖商家使用 ​ 用户端-点餐用户使用 当我们完成该项目的学习&#xff0c;可以培养以下能力&#xff1a; 1. 软件开发整体介绍 作为一…

Java高级特性 - IO流

第1关 什么是IO流 BC,C 第2关 字节流-输入输出 第3关 字符流 - 输入输出 第4关 复制文件

BERT 详解

BERT简介 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是由 Google 在 2018 年提出的一种预训练语言模型。BERT 在自然语言处理&#xff08;NLP&#xff09;领域取得了重大突破&#xff0c;因为它能够有效地捕捉文本的上下文信息&am…

LLM大模型意图识别:分类算法lora训练案例

参考&#xff1a; https://blog.csdn.net/weixin_42357472/article/details/141134380 &#xff08;LLaMA-Factory 微调训练&#xff09; https://modelscope.cn/competition/54/summary?seasonId56 https://github.com/coggle-club/notebooks/blob/main/notebooks/llm/RAG-BM…

(计算机网络)期末

计算机网络概述 物理层 信源就是发送方 信宿就是接收方 串行通信--一次只发一个单位的数据&#xff08;串行输入&#xff09; 并行通信--一次可以传输多个单位的数据 光纤--利用光的反射进行传输 传输之前&#xff0c;要对信源进行一个编码&#xff0c;收到信息之后要进行一个…

Rk3588 onnx转rknn,出现 No module named ‘rknn‘

一、操作步骤&#xff1a; rk3588 需要将yolo11 的模型onnx转rknn。 https://github.com/airockchip/rknn_model_zoo/tree/main/examples/yolo11 这个是用yolo11训练的模型&#xff0c;有80种类型。 完整下载下来后&#xff0c;在按文档描述下载模型下来&#xff1a; 然后进…

DDR3与MIG IP核详解(一)

一、ddr3(全称第三代双倍速率同步动态随机存储器)&#xff1a; 1、特点&#xff1a;1&#xff1a;掉电无法保存数据&#xff0c;需要周期性的刷新。2:时钟上升沿和下降沿都会传输数据。 3&#xff1a;突发传输&#xff0c;突发长度 Burst Length一般为…

多模态和大模型原理

一、图文匹配原理 Clip 通过图像编码器和照片编码器将两者区分成N项&#xff0c;然后让它们相互内积&#xff0c;能够匹配得上的则内积值为1&#xff0c;不能够匹配上的则内积为-1&#xff0c;也就是负样本&#xff0c;如上图&#xff0c;除了对角线的正样本&#xff0c;周围…

15 go语言(golang) - 并发编程goroutine原理及数据安全

底层原理 Go 的 goroutine 是一种轻量级的线程实现&#xff0c;允许我们在程序中并发地执行函数。与传统的操作系统线程相比&#xff0c;goroutine 更加高效和易于使用。 轻量级调度 用户态调度&#xff1a;Go 运行时提供了自己的调度器&#xff0c;这意味着 goroutine 的创建…

Flink细粒度的资源管理

Apache Flink致力于为所有应用程序自动导出合理的默认资源需求。对于希望根据其特定场景微调其资源消耗的用户,Flink提供了细粒度的资源管理。这里我们就来看下细粒度的资源管理如何使用。(注意该功能目前仅对DataStream API有用) 1. 适用场景 使用细粒度的资源管理的可能…

《操作系统 - 清华大学》5 -5:缺页异常

文章目录 1. 缺页异常的处理流程2.在何处保存未被映射的页&#xff1f;3. 虚拟内存性能 1. 缺页异常的处理流程 缺页中断的处理过程: CPU读内存单元&#xff0c;在TLB中根据其虚拟地址匹配物理地址&#xff0c;未命中&#xff0c;读页表; 由于页表项的存在位为0&#xff0c;CP…

Linux-NFS

文章目录 NASNFSNFS配置 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Linux专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月27日12点50分 NAS 网络接入存储 共享存储文件存储 NAS设备包括 NAS引擎一个或多个网络接口一个操作系统…

OpenHarmony属性信息怎么修改?触觉智能RK3566鸿蒙开发板来演示

本文介绍在开源鸿蒙OpenHarmony系统下&#xff0c;修改产品属性信息的方法&#xff0c;触觉智能Purple Pi OH鸿蒙开发板演示&#xff0c;搭载了瑞芯微RK3566四核处理器&#xff0c;Laval鸿蒙社区推荐开发板&#xff0c;已适配全新OpenHarmony5.0 Release系统&#xff0c;感兴趣…

杰发科技AC7803——不同晶振频率时钟的配置

计算公式 PLL_POSDIV [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62] PLL_PREDIV_1 1 2 4 USE_XTAL 24M SYSCLK_FREQ 64M SYSCLK_DIVIDER 1 VCO USE_XTAL*…

面向对象进阶-抽象类

抽象方法 将共性行为&#xff08;方法&#xff09;抽取到父类&#xff0c;由于每个子类执行内容不一样&#xff0c;在父类不能确定具体的方法体&#xff0c;该方法可以定义为抽象方法。 抽象类&#xff1a;如果一个类中存在抽象方法&#xff0c;那么该 类必须声明为抽象类。…

【数据结构专栏】二叉搜索树(Binary Search Tree)的剖析?

文章目录 &#x1f9e8;前言1、二叉搜索树的基本概念&#xff1f;2、二叉搜索树的节点结构组成&#xff1f;3、二叉搜索树的插入操作&#xff1f;4、二叉搜索树的删除操作&#xff1f;5、二叉搜索树的遍历&#xff1f;6、二叉搜索树的性能分析&#xff1f;&#x1f389;完整代码…

分布式调用 - 服务间的远程调用RPC

文章目录 导图PreRPC 概述RPC 调用过程RPC 动态代理1. 接口定义 (SeverProvider)2. 实现类 (ServerProviderImpl)3. 动态代理类 (DynamicProxy)4. 客户端 (Client)5. 代码工作流程6. 总结和注意点7. 结果输出8. 小结 RPC 序列化协议编码网络传输 导图 服务和应用的调用基于场景…

vue3项目搭建-4-正式启动项目,git管理

安装插件&#xff1a; npm install vue router npm install eslint 完成目录&#xff1a; 需要添置文件夹&#xff1a; apis -> api接口 composables -> 组合函数 directives -> 全局指令 styles -> 全局样式 utils -> 工具函数 git 管理&#xff1a; …

GPON原理

GPON网络架构 对于OLT来说&#xff0c;它就相当于一个指挥官&#xff0c;它指挥PON口下的ONU在指定的时间段内发送数据以及发起测距过程等 而ONU则是一个士兵&#xff0c;按照OLT的指挥做出相应 而ODN它主要就是提供一个传输通道&#xff0c;主要包括分光器和光纤组成 对于PO…