vue3实现命令式弹窗

2024-02-04 17:12

本文主要是介绍vue3实现命令式弹窗,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

效果图

在这里插入图片描述

代码区域

首先实现弹窗组件my-modal.vue

这里实现一个极简易弹窗作为示例,其他功能和样式可自行补充和优化;

<template><div class="modal-mask"><div class="modal-wrap"><div class="modal"><div class="modal-header">{{ title }}</div><div class="modal-body"><componentv-if="isVNode(typeof content === 'function' ? content() : content)":is="content"></component><span v-else>{{ content }}</span></div><div class="modal-footer"><button @click="emits('cancel')">取消</button><button @click="emits('confirm')" style="margin-left: 12px">确定</button></div></div></div></div>
</template>
<script setup>
import { isVNode } from "vue";
const props = defineProps({open: {type: Boolean,default: false,},title: {type: String,default: "弹窗标题",},content: {type: [Function, Object, String],default: "弹窗内容",},
});
const emits = defineEmits(["confirm", "cancel"]);
</script><style lang="scss">
.modal-mask {position: absolute;top: 0;right: 0;bottom: 0;left: 0;background-color: rgba(0, 0, 0, 0.38);z-index: 1000;> .modal-wrap {display: flex;align-items: center;justify-content: center;width: 100%;height: 100%;> .modal {width: 500px;height: 300px;background-color: #ffffff;display: flex;flex-direction: column;justify-content: space-between;> .modal-header {display: flex;align-items: center;padding: 10px 12px;border-bottom: 1px solid #e8e8e8;}> .modal-body {padding: 24px;}> .modal-footer {display: flex;align-items: center;justify-content: flex-end;padding: 10px 12px;border-top: 1px solid #e8e8e8;}}}
}
</style>

my-modal.js文件

import { h, render } from 'vue'
import MyDialog from './my-modal.vue'export default function (option) {const divDom = document.createElement('div')document.body.appendChild(divDom);divDom.id = `modal-${Math.floor(Math.random() * 1000000)}`return new Promise((resolve, reject) => {// 关闭弹窗const closeModal = () => {render(null, divDom)document.body.removeChild(divDom)}// 确定const onConfirm = async () => {await option.onConfirm?.()closeModal()resolve()}// 取消const onCancel = async () => {await option.onCancel?.()closeModal()reject('关闭弹窗')}const vNode = h(MyDialog, {...option,onConfirm,onCancel,})render(vNode, divDom)})
}

命令式使用该弹窗

<template><div><button @click="openModal">打开弹窗</button></div>
</template><script lang="jsx" setup>
import MyModal from "@/components/my-modal.js";const openModal = async () => {await MyModal({ title: "系统提示", content: () => <span style="color: red">确定删除该信息吗?</span>, onConfirm: () => {console.log('点击确定')}  });// 点击确定的后续操作console.log("弹窗点击确定后的业务逻辑");
};
</script>

这篇关于vue3实现命令式弹窗的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/678240

相关文章

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp

Kali Linux安装实现教程(亲测有效)

《KaliLinux安装实现教程(亲测有效)》:本文主要介绍KaliLinux安装实现教程(亲测有效),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、下载二、安装总结一、下载1、点http://www.chinasem.cn击链接 Get Kali | Kal

C#使用MQTTnet实现服务端与客户端的通讯的示例

《C#使用MQTTnet实现服务端与客户端的通讯的示例》本文主要介绍了C#使用MQTTnet实现服务端与客户端的通讯的示例,包括协议特性、连接管理、QoS机制和安全策略,具有一定的参考价值,感兴趣的可... 目录一、MQTT 协议简介二、MQTT 协议核心特性三、MQTTNET 库的核心功能四、服务端(BR

CSS 样式表的四种应用方式及css注释的应用小结

《CSS样式表的四种应用方式及css注释的应用小结》:本文主要介绍了CSS样式表的四种应用方式及css注释的应用小结,本文通过实例代码给大家介绍的非常详细,详细内容请阅读本文,希望能对你有所帮助... 一、外部 css(推荐方式)定义:将 CSS 代码保存为独立的 .css 文件,通过 <link> 标签

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

Dubbo之SPI机制的实现原理和优势分析

《Dubbo之SPI机制的实现原理和优势分析》:本文主要介绍Dubbo之SPI机制的实现原理和优势,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Dubbo中SPI机制的实现原理和优势JDK 中的 SPI 机制解析Dubbo 中的 SPI 机制解析总结Dubbo中

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

Java 压缩包解压实现代码

《Java压缩包解压实现代码》Java标准库(JavaSE)提供了对ZIP格式的原生支持,通过java.util.zip包中的类来实现压缩和解压功能,本文将重点介绍如何使用Java来解压ZIP或RA... 目录一、解压压缩包1.zip解压代码实现:2.rar解压代码实现:3.调用解压方法:二、注意事项三、总

NGINX 配置内网访问的实现步骤

《NGINX配置内网访问的实现步骤》本文主要介绍了NGINX配置内网访问的实现步骤,Nginx的geo模块限制域名访问权限,仅允许内网/办公室IP访问,具有一定的参考价值,感兴趣的可以了解一下... 目录需求1. geo 模块配置2. 访问控制判断3. 错误页面配置4. 一个完整的配置参考文档需求我们有一

Linux实现简易版Shell的代码详解

《Linux实现简易版Shell的代码详解》本篇文章,我们将一起踏上一段有趣的旅程,仿照CentOS–Bash的工作流程,实现一个功能虽然简单,但足以让你深刻理解Shell工作原理的迷你Sh... 目录一、程序流程分析二、代码实现1. 打印命令行提示符2. 获取用户输入的命令行3. 命令行解析4. 执行命令