当前位置: 首页 > news >正文

uniapp + Vue3自定义封装弹窗组件

uniapp + Vue3自定义封装弹窗组件

需求背景

在uniapp项目中,有时候需要弹出一个自定义的弹窗组件,比如提示框、确认框、选择框等。

实现方案

1. 创建弹窗组件

首先,我们需要创建一个弹窗组件,比如my-dialog.vue

<script setup>
import { ref, defineProps, defineEmits, defineExpose } from 'vue'// 定义组件名称
const component = {name: "yc-dialog"
}// 定义组件的 props
const props = defineProps({title: { type: String, default: 'Title' },content: { type: String, default: 'Concent' },confirmText: { type: String, default: "Confirm" },cancelText: { type: String, default: 'Cancel' }
})// 定义组件的 emits
const emit = defineEmits(['clickConfirm', 'clickCancel'])// 是否显示弹窗
const isDialog = ref(false)// 弹窗确认
const handleConfirm = () => {emit('clickConfirm')
}// 弹窗取消
const handleCancel = () => {emit('clickCancel')isDialog.value = false
}// 暴露 isDialog 变量
defineExpose({ isDialog })
</script><template><!-- 自定义弹窗组件 --><div class="my-dialog" v-if="isDialog"><div class="dialog-box"><div class="dialog-title"><text>{{ title }}</text></div><div class="dialog-content"><text>{{ content }}</text></div><div class="dialog-btns"><div class="btn-item" @click="handleConfirm"><text>{{ confirmText }}</text></div><div class="btn-item" @click="handleCancel"><text>{{ cancelText }}</text></div></div> </div></div>
</template><style scoped lang="scss">
// 定义弹窗背景颜色
$dialog-bgc: #F8F8F8;.my-dialog {position: fixed;top: 0;left: 0;width: 100%;height: 100%;background-color: rgba(0, 0, 0, 0.5);.dialog-box {width: 80%;height: 300rpx;margin: auto;background-color: $dialog-bgc;border-radius: 20rpx;position: absolute;top: 40%;left: 50%;transform: translate(-50%, -50%);display: flex;flex-direction: column;justify-content: space-around;line-height: 100rpx;.dialog-title {flex: 1;font-size: 40rpx;font-weight: 600;text-align: center;}.dialog-content {flex: 1;font-size: 35rpx;text-align: center;line-height: 60rpx;}.dialog-btns {flex: 1;display: flex;justify-content: space-around;.btn-item {width: 160rpx;height: 80rpx;line-height: 80rpx;text-align: center;border-radius: 12rpx;background-color: #409eff;color: #F8F8F8;}.btn-item:last-child {background-color: #fff;color: #409eff;}}}
}
</style>

2. 使用弹窗组件

然后,在需要弹出弹窗的页面,比如index.vue中,使用my-dialog.vue组件:

<template><view><button type="primary" @click="showDialog">弹出弹窗</button><yc-dialogref="dialogRef":title="title":content="content":confirmText="confirmText":cancelText="cancelText"@clickConfirm="handleConfirm"@clickCancel="handleCancel"/><view><text>Hello World</text></view></view>
</template><script setup>
import { ref } from 'vue'
import YcDialog from './my-dialog.vue'const dialogRef = ref(null)const title = ref('弹窗标题')
const content = ref('弹窗内容')
const confirmText = ref('确认')
const cancelText = ref('取消')// 显示弹窗
const showDialog = () => {dialogRef.value.isDialog = true
}const handleConfirm = () => {console.log('confirm')// 需要执行的函数// ...
}const handleCancel = () => {console.log('cancel')// 需要执行的函数// ...
}</script>

注意事项

  • 弹窗组件的样式,可以根据需求进行自定义,比如字体大小、颜色、背景色等。
  • 弹窗组件的功能,比如确认、取消按钮的文字、点击事件等,可以根据需求进行自定义。
  • 弹窗组件的显示、隐藏,可以通过isDialog变量进行控制。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux 数据结构 顺序表 链表
  • SpringBoot SSM vue在线作业考试系统
  • RISC-V单片机智能落地扇方案
  • 华为云征文|部署个人博客管理系统 Ghost
  • Golang 字面量的表示
  • 【Docker】容器挂载文件修改后 Commit 新镜像,挂载文件不会更新
  • 用Python实现时间序列模型实战——Day 6: ARIMA 模型的理论基础
  • R 语言学习教程,从入门到精通,R 绘图饼图(23)
  • Flink 1.14.* Flink窗口创建和窗口计算源码
  • 链动2+1与消费增值模式的协同效应
  • NestJs bull 用法
  • Linux驱动开发基础(sr04超声波模块)
  • 算法day16|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
  • filezilla使用教程(window下filezilla使用教程)
  • 梧桐数据库(WuTongDB):什么是“顺序扫描”
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 4个实用的微服务测试策略
  • CSS魔法堂:Absolute Positioning就这个样
  • exif信息对照
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Lsb图片隐写
  • Mac转Windows的拯救指南
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Vue ES6 Jade Scss Webpack Gulp
  • 聊聊hikari连接池的leakDetectionThreshold
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 删除表内多余的重复数据
  • 通信类
  • 我的业余项目总结
  • 阿里云ACE认证之理解CDN技术
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​比特币大跌的 2 个原因
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #70结构体案例1(导师,学生,成绩)
  • #Linux(Source Insight安装及工程建立)
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (1)无线电失控保护(二)
  • (16)Reactor的测试——响应式Spring的道法术器
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (2)nginx 安装、启停
  • (C#)获取字符编码的类
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (分布式缓存)Redis分片集群
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (三分钟)速览传统边缘检测算子
  • (转) Android中ViewStub组件使用
  • (转)Oracle存储过程编写经验和优化措施
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (转)四层和七层负载均衡的区别