dialog封装

发布时间:2026/11/4 3:43:43

dialog封装 通用封装弹窗 / 自定义组件模板可套用// 子组件templateel-dialog v-modelinnerFlagtitle弹窗// 业务内容template #footerspanclassel-button clickstate.peopleDialogShow false取消/el-buttonel-button typeprimaryclickconfirm确定/el-button/span/template/el-dialog/templatescript setupimport{computed}fromvue// 1. 定义接收的开关参数constpropsdefineProps([show])// 2. 定义更新事件 业务事件constemitdefineEmits([update:show,confirmSelect])// 封装双向绑定constinnerFlagcomputed({get(){returnprops.show},set(val){emit(update:show,val)}})// 业务操作抛出数据constconfirm(){emit(confirmSelect,选中的数据)}/script// 父组件CustomDialog v-model:showisDialogShowconfirmSelectgetData/script setupconstisDialogShowref(false)constgetData(res){console.log(子组件传回数据,res)isDialogShow.valuefalse}/script业务示例templateel-dialogv-modelinnerVisibletitle组件Libraryv-ifinnerVisiblewidth90%stylemargin-top:4%divclasscomBoxdivclassxxBoxclickselectComp(msg)XxCom/XxCom/divdivclassrwBoxclickselectComp(task)RwCom/RwCom/divdivclasschartBoxclickselectComp(chart)BarChartrefbarChartsChild/BarChart/div/div/el-dialog/templatescriptsetupimport{ref,onMounted,reactive,computed,}fromvueimportXxComfrom/components/text/xx.vueimportRwComfrom/components/text/rw.vueimportBarChartfrom/components/chart/barChart.vueconstemitdefineEmits([select,update:comDialogShow])constpropsdefineProps([comDialogShow])constinnerVisiblecomputed({get(){returnprops.comDialogShow},//父组件传进来的弹窗显示状态set(val){emit(update:comDialogShow,val)}//通知父组件更新变量})// 自定义业务事件 把用户选中的组件标识 传给父页面constselectComp(key){emit(select,key)}onMounted((){})/scriptstylelangscssscoped//dialog 相关样式 .comBox{display:flex;flex-wrap:wrap;gap:12px;/* 模块间距按需调整 */width:100%;height:100%;overflow:auto;.xxBox, .rwBox, .chartBox, .zbBox{width:24.4%;height:36%;background:#f5f7fa;border-radius:8px;padding:12px;overflow-y:auto;/* 内容超出时滚动 */}}/style主页面引入templateComponentLibDialogv-model:comDialogShowstate.dialogVisibleselectselectCompHandle//templatescriptsetupconststatereactive({dialogVisible:false,})// 自定义事件弹窗选中组件赋值给对应模块constselectCompHandle(compKey){// 给当前操作模块赋值moduleData[activeModuleId].keycompKey// 关闭弹窗state.dialogVisiblefalse}/script详解 v-model:visible 和 select 分别是什么、为什么这么写Vue3 组件自定义双向绑定规范v-model:xxx变量 等价于 :xxx变量 update:xxx新值 变量 新值v-model:comDialogShow“dialogVisible” —— Vue3 多参数 v-model 语法规则绑定参数名 xxx更新事件必须固定叫 update:xxx这是 Vue 语法约定不能随便改事件名。// 弹窗组件里定义了constemitdefineEmits([select,update:comDialogShow])constpropsdefineProps([comDialogShow])constinnerVisiblecomputed({get(){returnprops.comDialogShow},//父组件传进来的弹窗显示状态set(val){emit(update:comDialogShow,val)}//通知父组件更新变量})// 父组件对应写法两种写法完全等价//写法1. 简写推荐ComponentLibDialog v-model:comDialogShowdialogVisible///写法2. 完整展开写法更好理解底层ComponentLibDialog:comDialogShowdialogVisibleupdate:comDialogShowval dialogVisible val///能不能换名字完全可以举例子//比如不想用 visible改用 open//1.子组件改 props、emit 名称constpropsdefineProps([open])constemitdefineEmits([update:open])constinnerOpencomputed({get(){returnprops.open},set(val){emit(update:open,val)}})//2.父组件同步改成ComponentLibDialog v-model:opendialogVisible/select“selectCompHandle” —— 自定义业务事件子组件触发 emit(‘select’, 参数)第一个参数是事件名后面是要传给父页面的数据// 弹窗需要把 用户选中的组件标识msg/task/chart传给父页面所以自定义事件 select// 选中组件时抛出keyconstselectComp(key){emit(select,key)}父组件接收 select“selectCompHandle”constselectCompHandle(compKey){if(!activeModuleId)return// 给当前操作模块赋值组件moduleData[activeModuleId].keycompKey// 关闭弹窗state.comDialogShowfalse}事件名可以随便自定义没有强制约束比如你想叫 chooseComponent、pick 都没问题子组件emit(‘chooseComponent’, compKey)父组件chooseComponent“handleSelectComp”举个对比示例换一套名字演示。功能完全不变只是参数和事件名换了。//子组件constpropsdefineProps([open])constemitdefineEmits([update:open,pickComponent])constinnerOpencomputed({get(){returnprops.open},set(val){emit(update:open,val)}})consthandleSelect(key){emit(pickComponent,key)innerOpen.valuefalse}//父组件ComponentSelectDialog v-model:opendialogVisiblepickComponenthandleSelectComp/总结两类事件的区别类型语法规则作用命名约束v-model:xxx 双向绑定事件固定 update:xxx同步开关类状态弹窗显隐、开关、输入框值更新事件名不能自定义必须 update:xxx自定义业务事件 xxx事件名完全自定义传递业务数据选中项、提交、删除、点击随便起名见名知意即可使用场景什么时候用 v-model:xxx什么时候用自定义事件1.控制开关、输入值、显隐这类双向同步状态 → 用 v-model:xxx2.点击选择、提交、删除、获取业务数据这类单向回调传参 → 自定义事件 xxx
延伸阅读

更多相关文章

2026/11/1 0:07:52

5款免费macOS系统优化工具:让你的Mac重获新生

5款免费macOS系统优化工具:让你的Mac重获新生 你是否发现自己的Mac变得越来越慢?存储空间总是不够用?别担心,这几乎是每个Mac用户都会遇到的问题。随着使用时间的增长,系统会积累大量缓存文件、日志和临时数据&#x…

2026/11/3 12:26:34

高通CamX相机框架源码解析:从架构设计到开发调试实战

简介:本资源为高通Camera Camx架构官方级源码仓库完整镜像,面向Android系统工程师、相机算法开发者及嵌入式图像处理研究人员,用于深度理解骁龙平台相机HAL层设计、图像流水线调度与硬件协同机制。压缩包含763个文件,主体为358个头…

2026/11/3 0:20:32

生存战争2.4幸运四叶草获取路线与效果验证指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 3:38:46

AI能替代设计师建模吗?实测拆解与高效人机协作指南

不是所有问题都值得用“是或否”来回答,但“AI能不能直接替代设计师的建模工作”这个问题,我几乎每周都会被问一次。问的人里有刚入行的新人,也有带团队十年的资深设计师,甚至还有甲方爸爸拿着AI生成的角色图来问“这直接转成模型…

2026/11/4 3:38:46

AI编程3.0时代:全栈工程师的四大不可替代能力

1. 这不是一次技术升级,而是一次开发角色的“身份重置”“AI 编程走到 3.0”,这个说法最近在技术社区里被反复提起,但很多人没意识到,它背后真正震动的不是工具链,而是我们对“程序员”这个身份的认知根基。我带过三届…

2026/11/4 3:38:46

OpenVoice:CPU上5秒实现高保真声音克隆的技术解析

1. 这不是“又一个”工具,而是声音克隆技术落地临界点的标志性事件最近刷到 GitHub Trending 页面时,我下意识划过——直到看到那个数字:3.3 万 Star,7 天暴涨。不是某个老牌开源库的缓慢积累,也不是营销号包装的“AI神…

2026/11/4 3:38:46

语音在智能硬件中的全链路开发实战

1. 为什么“语音智能硬件”不是加法,而是重构开发范式我第一次把麦克风焊上STM32板子、跑通基础ADC采样时,满心以为“语音功能”就算落地了。结果客户拿着成品说:“你们这设备能听懂我说‘调低音量’吗?”——我当场愣住。那会儿我…

2026/11/4 3:38:46

全栈3.0:从技术栈到决策栈的能力重构

1. 当“全栈”这个词开始被AI重新校准刻度我第一次在团队晨会上听到“我们这个需求让AI全栈跑一遍”这句话时,下意识摸了手机查了下日历——不是愚人节,也不是新员工入职玩笑。那是2024年6月,我们正在交付一个校园讲座预约系统,后…

2026/11/4 3:33:46

超声影像组学与SHAP:≤3cm小肝癌可解释分类及外部验证

小肝癌这三个字,在超声科门诊里出现的频率这两年明显在涨。体检普及、肝硬化患者规律随访、加上增强影像的广泛应用,越来越多≤3cm 的肝脏局灶性病变在还没长出典型征象时就被抓到。问题也恰好出在这里:3cm 以下的肝细胞癌,在常规…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 0:03:20

AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年…

2026/11/4 0:03:20

从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你…

2026/11/4 0:03:20

32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑