自定义提示确认弹窗-vue
最初可运行代码
弹窗组件代码:
(后来发现以下代码可运行,但打包 typescript 类型检查出错,可打包的代码在文末)
<template><div v-if="isVisible" class="dialog"><div class="dialog-content"><div style="padding: 40px 40px; text-align: center">{{message}}</div><div style="display: flex; border-top: 1px solid #d2d0d0"><div @click="cancel" class="dialog-button">取消</div><div style="border-right: 1px solid #d2d0d0"></div><div @click="handleConfirm" class="dialog-button" style="color: #4e8fd3">确定</div></div></div></div>
</template><script setup lang="ts">
import { ref } from 'vue';const isVisible = ref(false);
const message = ref('');
const confirmCallback = ref(null)
const cancelCallback = ref(null);const showDialog = (params = {} ) => {isVisible.value = true;message.value = params.message || '提示内容';confirmCallback.value = params.confirmCallback || null;cancelCallback.value = params.cancelCallback || null;
};const handleConfirm = () => {if (confirmCallback.value) {confirmCallback.value();}isVisible.value = false;
};const cancel = () => {if (cancelCallback.value) {cancelCallback.value();}isVisible.value = false;
};defineExpose({showDialog
});
</script><style scoped>
.dialog {position: fixed;top: 0;left: 0;width: 100%;height: 100%;background-color: rgba(0, 0, 0, 0.5);display: flex;justify-content: center;align-items: center;font-size: 16px;
}.dialog-content {background-color: #fff;border-radius: 10px;width: 80%;
}.dialog-button {flex-grow: 1;text-align: center;padding: 20px 0;
}
</style>
效果:更适用于移动端

弹窗显示:
<template><div><button @click="openDialog">打开弹窗</button><ChildDialg ref="dialogRef" /></div>
</template><script setup lang="ts">
import { ref } from 'vue';// 1. 引入子组件
import ChildDialg from "@/views/components/ChildDialg.vue";// 2. 定义子组件 ref 参数
const dialogRef = ref(null);const openDialog = () => {// 3. 弹窗显示dialogRef.value.showDialog({message: '内容',confirCallback: () => {}});
};
</script>
打包 typescript 检查错误修复
######## 项目打包,typescript 类型检查报错 ###########
1. 函数接收类没有属性定义

2. 调用弹窗时未作 组件 非空判断

3. 接收的回调函数参数,定义的初始值为 null ,无法以函数方式调用

4. 定义的组件 ref 参数默认值为 null ,无法调用子组件暴露的函数

![]()
5. 子组件定义的参数 与 父组件传递的参数不一致(定义了取消回调,但没有传入)
可以选择传入“取消”操作的回调函数,但考虑到此组件在我实际运用时取消没有其它操作,便选择不定义其回调函数

最终可打包的代码
<template><div v-if="isVisible" class="dialog"><div class="dialog-content"><div style="padding: 40px 40px; text-align: center">{{message}}</div><div style="display: flex; border-top: 1px solid #d2d0d0"><div @click="cancel" class="dialog-button">取消</div><div style="border-right: 1px solid #d2d0d0"></div><div @click="handleConfirm" class="dialog-button" style="color: #4e8fd3">确定</div></div></div></div>
</template><script setup lang="ts">
import { ref } from 'vue';const isVisible = ref(false);
const message = ref('');
const confirmCallback = ref(() => {})
const cancelCallback = ref(() => {});const showDialog = (params = {message: '提示内容',confirmCallback: () => {}
} ) => {isVisible.value = true;message.value = params.message;confirmCallback.value = params.confirmCallback;
};const handleConfirm = () => {if (confirmCallback.value) {confirmCallback.value();}isVisible.value = false;
};const cancel = () => {if (cancelCallback.value) {cancelCallback.value();}isVisible.value = false;
};defineExpose({showDialog
});
</script><style scoped>
.dialog {position: fixed;top: 0;left: 0;width: 100%;height: 100%;background-color: rgba(0, 0, 0, 0.5);display: flex;justify-content: center;align-items: center;font-size: 16px;
}.dialog-content {background-color: #fff;border-radius: 10px;width: 80%;
}.dialog-button {flex-grow: 1;text-align: center;padding: 20px 0;
}
</style>
<template><div><button @click="openDialog">打开弹窗</button><ChildDialg ref="dialogRef" /></div>
</template><script setup lang="ts">
import { ref } from 'vue';// 1. 引入子组件
import ChildDialg from "@/views/components/ChildDialg.vue";// 2. 定义子组件 ref 参数
const dialogRef = ref<InstanceType<typeof DialogView> | null>(null)const openDialog = () => {// 3. 弹窗显示if(dialogRef.value) {dialogRef.value.showDialog({message: '内容',confirCallback: () => {}});}
};
</script>
相关文章:
自定义提示确认弹窗-vue
最初可运行代码 弹窗组件代码: (后来发现以下代码可运行,但打包 typescript 类型检查出错,可打包的代码在文末) <template><div v-if"isVisible" class"dialog"><div class&quo…...
运行fastGPT 第五步 配置FastGPT和上传知识库 打造AI客服
运行fastGPT 第五步 配置FastGPT和上传知识库 打造AI客服 根据上一步的步骤,已经调试了ONE API的接口,下面,我们就登陆fastGPT吧 http://xxx.xxx.xxx.xxx:3000/ 这个就是你的fastGPT后台地址,可以在configer文件中找到。 账号是…...
CSS 合法颜色值
CSS 颜色 CSS 中的颜色可以通过以下方法指定: 十六进制颜色带透明度的十六进制颜色RGB 颜色RGBA 颜色HSL 颜色HSLA 颜色预定义/跨浏览器的颜色名称使用 currentcolor 关键字 十六进制颜色 用 #RRGGBB 规定十六进制颜色,其中 RR(红色&…...
Redis - General - 未授权访问漏洞(用户配置问题)
0x01:产品简介 Redis(Remote Dictionary Service,远程数据服务),是一款开源的基于内存的键值对存储系统,其主要被用作高性能缓存服务器使用(比如作为消息中间件和用于 Session 共享)…...
解决 WSL 2 中 Ubuntu 22.04 安装 Docker 后无法启动的问题
问题场景 安装Docker后,执行sudo service docker start启动Docker,提示启动成功 rootDev:~# sudo service docker start * Starting Docker: docker [ OK ]执行su…...
Conda的一些常用命令
以下是Conda的一些常用命令: pip freeze > requirements.txt pip install -r requirements.txt 基本信息查看类 查看conda版本: conda -V 或 conda --version 可以查看当前安装的conda版本。 查看conda帮助信息: conda -h 或 conda --he…...
AI 大爆发时代,音视频未来路在何方?
AI 大模型突然大火了 回顾2024年,计算机领域最大的变革应该就是大模型进一步火爆了。回顾下大模型的发展历程: 萌芽期:(1950-2005) 1956年:计算机专家约翰麦卡锡首次提出“人工智能”概念,标志…...
Invicti-Professional-V25.1
01 更新介绍 此更新包括对内部代理的更改。内部扫描代理的当前版本为 25.1.0。内部身份验证验证程序代理的当前版本为 25.1.0。#新功能现在,单击扫描摘要屏幕中的预设扫描图标会将您重定向到具有过滤视图的 “最近扫描” 页面,从而改进导航和对相关扫描…...
【版图设计】2025年 最新 Cadence Virtuoso IC617 虚拟机环境配置全过程 集成电路版图设计环境配置
一、Cadence Virtuoso IC617 是什么? Cadence Virtuoso 是一个电子设计自动化(EDA)工具,主要用于集成电路(IC)的设计和仿真,尤其是在模拟、混合信号和射频(RF)电路设计领…...
Python基本概念与实践
Python语言,总给我一种“嗯?还能这么玩儿?”的感觉 Python像一个二三十岁的年轻人,自由、年轻、又灵活 欢迎一起进入Python的世界~ 本人工作中经常使用Python,针对一些常用的语法概念进行持续记录。 目录 一、类与常…...
# [Unity] 【游戏开发】获取物体和组件的脚本方法
在Unity开发中,获取游戏物体(GameObject)及其组件(Component)是脚本编程的核心技能。本文将详细介绍如何在脚本中访问游戏物体及其组件,深入讲解常用的获取方法及优化策略,以帮助开发者高效编写Unity脚本。 1. 理解游戏物体与组件的关系 游戏物体(GameObject):Unity场…...
10 为什么系统需要引入分布式、微服务架构
java技术的发展 在java开始流行起来之后,主要服务于企业家应用,例如ERP,CRM等等,这些项目是为企业内部员工使用,我们的思维是怎么用设计模式,如何封装代码。让开发人员关注到业务上去,系统也就那么几十几百…...
大数据系列之:上传图片到cos、cos
大数据系列之:上传图片到cos、cos 安装python cos sdk上传图片到cos高级上传接口分页列举桶内对象cos桶之间复制cos桶之间复制图片数据 安装python cos sdk pip install -U cos-python-sdk-v5上传图片到cos # -*- codingutf-8 from qcloud_cos import CosConfig fr…...
wsl 使用 docker
直接在 wsl 安装 docker , 有可能会失败,可以通过在 windows 安装 Docker Desktop,然后连接 wsl 进行解决 注意: 1. 需要先安装 wsl 2. 使用时要先启动 docker Desktop, 才能在 wsl 中使用 下载: Docker: Accelerated Containe…...
归并延拓:LeetCode归并排序逆序对问题
前言 欢迎来到我的算法探索博客,在这里,我将通过解析精选的LeetCode题目,与您分享深刻的解题思路、多元化的解决方案以及宝贵的实战经验,旨在帮助每一位读者提升编程技能,领略算法之美。 👉更多高频有趣Lee…...
51.WPF应用加图标指南 C#例子 WPF例子
完整步骤: 先使用文心一言生成一个图标如左边使用Windows图片编辑器编辑,去除背景使用正方形,放大图片使图标铺满图片使用格式工程转换为ico格式,分辨率为最大 在资源管理器中右键项目添加ico类型图片到项目里图片属性设置为始终…...
Springboot 注解缓存使用教程
Spring Boot Cache 注解使用教程 Spring Boot 提供了强大的缓存抽象,开发者可以通过注解快速实现缓存功能,从而提高系统性能。本教程将全面介绍 Spring Boot 提供的缓存相关注解及其作用,并结合示例讲解实际应用。 1. 常用缓存注解概览 Spring Boot 缓存提供以下核心注解…...
Python爬虫:从入门到实践
Python爬虫学习资料 Python爬虫学习资料 Python爬虫学习资料 在当今数字化信息爆炸的时代,数据已成为企业和个人发展的重要资产。Python爬虫作为一种高效获取网络数据的工具,正逐渐被广大开发者所熟知和应用。无论是市场调研、学术研究,还是…...
删除字符串中的所有相邻重复项(力扣1047)
这题也是属于栈的经典应用。为什么这样说呢?因为也是让我们删除相邻项。注意这里相邻项的理解,并不仅仅是说最开始的字符串相邻的项。在我们删除了某些相邻项后,会改变字符串,导致原本不相邻的字符变成相邻的,这同样属…...
MYSQL对数据的增删改查
DML 语句 对数据 进行 增、删、改 操作 插入 命令-- 插入值的个数 必须和 字段定义的个数相同 且 顺序 一致 insert into <tableName> values (val ...) ; /* 不推荐使用 */insert into <tableName>(col1 , col2 , ...) values(val1, val2 , ...) ;-- 批量插…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
