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,一经查实,立即删除!

相关文章

HTML和CSS 表单、表格练习

HTML和CSS 表格练习 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>HTML表格练习</title>…

【大模型】深度解析 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…

SCI文献推荐-基于物联网的新型压降控制,用于多个微电网之间的电池 SoC 平衡

Novel IoT-Based Droop Control for Battery SoC Balancing Among Multiple Microgrids 基于物联网的新型压降控制&#xff0c;用于多个微电网之间的电池 SoC 平衡 |IEEE期刊和杂志 |IEEE Xplore 摘要&#xff1a;储能系统是微电网的重要组成部分&#xff0c;弥补了其自主运行…

(计算机网络)期末

计算机网络概述 物理层 信源就是发送方 信宿就是接收方 串行通信--一次只发一个单位的数据&#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; 然后进…

鸿蒙开发异步与线程

鸿蒙对于异步提供了三种处理方式&#xff08;注意这里是异步&#xff0c;不是特指线程&#xff09;&#xff1a; 1.JS原生的Promise异步 2.taskPool线程 3.worker常驻线程 Promise异步 对于我们做 Android开发&#xff0c;经常提到异步&#xff0c;就习惯性的认为是起个子线…

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…

​智能马桶蓝牙芯片方案

RAMSUN提供的智能马桶蓝牙芯片方案通过蓝牙低功耗&#xff08;BLE&#xff09;技术&#xff0c;智能马桶能够实现远程固件升级&#xff0c;即OTA&#xff08;Over-The-Air&#xff09;功能。用户无需亲自操作复杂的升级步骤&#xff0c;只需通过智能设备即可完成固件的更新&…

Linux-NFS

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

【智能制造-44】装配仿真

装配仿真包含以下功能模块&#xff1a; 零件建模与导入模块 功能描述&#xff1a; 能够创建简单的几何零件&#xff0c;如立方体、圆柱体、球体等基本形状。这对于一些标准件或者形状规则的零件来说&#xff0c;可以直接在装配仿真软件中生成&#xff0c;方便快捷。 支持多种…

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

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

常见点云文件格式详解及其应用分析【实践无坑版】

点云文件是存储三维点云数据的核心形式&#xff0c;广泛应用于机器人、自动驾驶、三维建模和增强现实等领域。点云文件不仅保存空间坐标&#xff0c;还可包含颜色、强度、法向量等附加信息&#xff0c;不同格式的点云文件适配不同的传感器和研究需求 本文将详细介绍常见点云文件…