vue3二次封装elementPlus的dialog弹窗组件

ops/2024/12/12 18:37:02/

1、在components目录下新建一个弹窗.vue文件,我这里是demoDialog.vue。

~template
javascript">
<template><div><el-dialog title="标题" v-model="visible" with="600px"><div class="dialog-content">我是弹窗</div><template #footer><div class="dialog-footer"><el-button @click="handleCancel">取消</el-button><el-button @click="handleConfirm">确认</el-button></div></template></el-dialog></div>
<template>
~JS
javascript"><script setup>
import { ref, reactive } from 'vue'/***  1.只暴露提供一个入口函数————openDialog(),保持组件内部封闭性*  2.数据交互尽量通过 openDialog() 方法来传递,减少外部状态依赖,固定的配置项参数才考虑用 props*/const emit = defineEmits(['confirm'])
let visible = ref(false)
// 打开弹窗 -- 可通过接收参数data来展示父组件的数据
const openDialog = (data) => {visible.value = trueconsole.log('data:', data);
}
// 提交
const handleConfirm = () => {emit('confirm', '我是传给父组件的数据222')visible.value = false
}
// 关闭
const handleCancel = () => {visible.value = false
}
// 暴露给父组件
defineExpose({openDialog
})</script>

 2、调用弹窗的父组件中引入并使用:

~template
javascript">  <!-- 弹窗组件 --><div>调用弹窗</div><el-button type="primary" @click="openDemoDialog">打开弹窗</el-button><demoDialog ref="demoDialogRef" @confirm="handleOnConfirm"></demoDialog>
~JS
javascript">/*** 3、弹窗组件* 数据交互尽量通过 openDialog() 方法来传递,减少外部状态依赖,固定的配置项参数才考虑用 props*/let demoDialogRef = ref()
// 通过ref调用子组件的方法
const openDemoDialog = () => {// 可以通过openDialog方法向弹窗内部传递参数,如弹窗要展示的数据demoDialogRef.value.openDialog({data:{name: '小白很白'}})
}
// 在弹窗里点击提交
const handleOnConfirm = (data) => {console.log('data', data);
}

3 总结:

        01、只暴露提供一个入口函数————openDialog(),保持组件内部封闭性;

        02、数据交互尽量通过 openDialog() 方法来传递,减少外部状态依赖,固定的配置项参数才考虑用 props。


http://www.ppmy.cn/ops/141305.html

相关文章

Java虚拟机启动时默认携带参数(jdk8)

在cmd窗口里输入 java -XX:PrintCommandLineFlags -version 输出参数如下 -XX:InitialHeapSize531771072 -XX:MaxHeapSize8508337152 -XX:PrintCommandLineFlags -XX:UseCompressedClassPointers -XX:UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:UseParalle…

网络安全法 -网络信息安全

第四章 网络信息安全 第四十条 网络运营者应当对其收集的用户信息严格保密&#xff0c;并建立健全用户信息保护制度。 第四十一条 网络运营者收集、使用个人信息&#xff0c;应当遵循合法、正当、必要的原则&#xff0c;公开收集、使用规则&#xff0c;明示收集、使用信息的…

树莓派3B+驱动开发(2)- LED驱动(传统模式)

github主页&#xff1a;https://github.com/snqx-lqh 本项目github地址&#xff1a;https://github.com/snqx-lqh/RaspberryPiDriver 本项目硬件地址&#xff1a;https://oshwhub.com/from_zero/shu-mei-pai-kuo-zhan-ban 欢迎交流 笔记说明 如我在驱动开发总览中说的那样&…

【智体OS】官方上新发布智体电视:基于rtpc和rttouchpad实现智体电视的手机遥控-可安装任意PC应用用于智体电视

【智体OS】官方上新发布智体电视&#xff1a;基于rtpc和rttouchpad实现智体电视的手机遥控-可安装任意PC应用用于智体电视 dtns.network是一款主要由JavaScript编写的智体世界引擎&#xff08;内嵌了three.js编辑器的定制版-支持以第一视角浏览3D场馆&#xff09;&#xff0c;…

架构13-持久化存储

零、文章目录 架构13-持久化存储 1、Kubernetes 存储设计 &#xff08;1&#xff09;存储设计考量 **设计哲学&#xff1a;**Kubernetes 遵循用户通过资源和声明式 API 描述意图&#xff0c;Kubernetes 根据意图完成具体操作。**复杂性&#xff1a;**描述用户的存储意图本身…

Mac软件推荐

Mac软件推荐 截图SnipasteXnipBob 快捷启动Raycast 系统检测Stats 解压缩The UnarchiverKeka&#xff08;付费&#xff09; 视频播放IINA 视频下载Downie&#xff08;付费&#xff09; 屏幕刘海TopNotchMediaMate&#xff08;付费&#xff09;NotchDrop&#xff08;付费&#x…

【STM32 Modbus编程】-作为主设备写单个线圈和寄存器

作为主设备写单个线圈和寄存器 文章目录 作为主设备写单个线圈和寄存器1、硬件准备与连接1.1 RS485模块介绍1.2 硬件配置与接线1.3 软件准备2、写入单个线圈3、写入单个寄存器本文将实现STM32作为ModBus主设备,将数据写入从设备的单个线圈和保持寄存器。 1、硬件准备与连接 1…

《人工智能安全:挑战与破局之路》

《人工智能安全&#xff1a;挑战与破局之路》 一、人工智能安全现状二、人工智能安全面临的挑战&#xff08;一&#xff09;技术层面的挑战&#xff08;二&#xff09;伦理与社会层面的挑战 四、人工智能安全未来发展趋势&#xff08;一&#xff09;技术创新引领发展&#xff0…