vue3.0 + elementUI 弹窗二次封装

news/2024/11/6 13:32:40/

 使用组件:

 <page-dialog v-model:dialogShow="gisLock" footerCustom>{{gisLock}}</page-dialog><page-dialog v-model:dialogShow="gisLock">{{gisLock}}<template #dialog-button><el-button type="primary" plain @click="handleClose"><el-icon class="el-icon--left"><Close /></el-icon>返回</el-button></template></page-dialog>

 组件封装:

<template v-if="dialogVisible"><el-dialog v-model="dialogVisible" :width="width" :before-close="handleClose"><template #header><div class="dialogTitle">// 弹窗名称前面都有一个icon  名称不icon也不一样, #header 可以根据自己的需求调整<el-icon v-if="header.icon" :class="selectClass()"></el-icon><span>{{ header.title }}</span></div></template> <slot></slot>  <template #footer v-if="footerCustom"><div class="dialog-footer"><el-button type="primary" plain @click="handleClose"><el-icon class="el-icon--left"><Close /></el-icon>取消</el-button><el-button type="primary" @click="saveBtnFn"><el-icon class="el-icon--left"><Check /></el-icon>确定</el-button></div></template><template #footer v-else><div class="dialog-footer"><slot name="dialog-button"></slot></div></template> </el-dialog>
</template>
<script lang="ts">
import { defineComponent, reactive, toRefs, watch } from "vue";
export default defineComponent({name: "PageDialog",props: {dialogShow: {type: Boolean,default: false,},header: {type: Object,default: {icon: "",title: "",},},width: {type: String,default: "40%",},footerCustom: {type: Boolean,default: false,},},  setup(props, { emit }) {// 数据const state = reactive({dialogVisible: false,});// 方法const methods = reactive({ selectClass: () => {let icon = "";if (props.header.icon) {icon = "iconfont " + props.header.icon;}return icon;},handleClose: () => {state.dialogVisible = false;},saveBtnFn: () => {emit("saveBtnFn");},});watch(() => state.dialogVisible,(val) => { //查看子组件值是否变化,在赋值给父组件emit("update:dialogShow", val);});watch(() => props.dialogShow,(val) => {//查看父组件值是否变化,在赋值给子组件state.dialogVisible = val;});return {...toRefs(state),...toRefs(methods),};},
});
</script> 
<style scoped>
.dialog-footer{text-align: center;
}
</style>


http://www.ppmy.cn/news/601590.html

相关文章

对新手来说,一句 Hello World 能有多少坑?

入门教程、案例源码、学习资料、读者群 请访问&#xff1a;python666.cn 大家好&#xff0c;欢迎来到 Crossin的编程教室 &#xff01; 在编程届&#xff0c;有一个不成文的习惯&#xff1a;在教授/学习一门新语言时&#xff0c;会以输出“Hello World”作为第一个代码实例。 因…

javascript网站背景音乐

∶∶网站背景音乐∶∶ [怎么添加背景音乐]&#xff1a;将这段代码插入到您的<首页布告>内容中&#xff0c;当您打开网站时即可听到背景音乐&#xff1a; <bgsound src/textbook/matter/music/china.mid loop"-1"> [怎么换成自己喜欢的音乐]&#xff1a;…

剪切的文件还能恢复吗?挽救误操作

在我们使用电脑过程中&#xff0c;剪切文件是一个很常见的操作&#xff0c;因为将文件剪切下来再粘贴到其他地方可以更好地管理文件。但是&#xff0c;一些用户会在操作过程中意外地将文件在移动到目标位置之前剪切了&#xff0c;导致丢失了重要文件。在这种情况下&#xff0c;…

pyqt 取鼠标处文字_侧裙可拆按键随心装,黑爵GTi模块化游戏鼠标评测

虽然大家买电竞装备时还是会先看看罗技、雷蛇这些国际TOP大牌&#xff0c;但是国产品牌近年来也不乏很多不错的精品外设。之前上手评测过一款英菲克的电竞游戏鼠标&#xff0c;原以为并没有什么惊艳&#xff0c;但后来发外形和手感给人挺出乎意料的感受。今天这款黑爵GTi模块化…

2021年 IEEE VIS 科学可视化与体渲染论文整理与分析

因为最近工作的关系&#xff0c;需要研究一下IEEE VIS中2017年以后的与我之前主要方向&#xff08;体渲染、医学可视化&#xff09;有关的论文。我把这些年全部的论文进行了筛选和梳理&#xff0c;总共筛选出57篇论文&#xff0c;打算写一个文章来记录这些内容。这个栏目是2021…

TI AM62x工业核心板规格书(单/双/四核ARM Cortex-A53 + 单核ARM Cortex-M4F,主频1.4GHz)

1 核心板简介 创龙科技SOM-TL62x是一款基于TI Sitara系列AM62x单/双/四核ARM Cortex-A53 单核ARM Cortex-M4F异构多核处理器设计的高性能低功耗工业级核心板&#xff0c;通过工业级B2B连接器引出2x Ethernet、9x UART、3x CAN-FD、GPMC、2x USB 2.0、CSI、DISPLAY等接口。处理…

AI生成--Keep-alive

在 Vue.js 中&#xff0c;<keep-alive> 是一个抽象组件&#xff0c;与 <transition> 类似&#xff0c;它不会直接渲染到 DOM 中。它是用来将组件缓存到内存中&#xff0c;以避免重复渲染&#xff0c;同时保留组件的状态。 <keep-alive> 的使用方法如下&…

搭建站群应该如何选择

搭建站群应该如何选择 一、服务器稳定性 首先我们来看稳定性&#xff0c;稳定性具体来看就是服务器所处机房是否稳定、带宽是否充裕&#xff0c;如果每个服务器建设300个左右的站群&#xff0c;小驰建议带宽至少要在10M以上&#xff0c;还有一点需要说明的是站群服务器一般都是…