vue3封装ElementUI plus Dialog弹窗

news2024/11/20 14:41:27

因为ElementuiPlus的dialog弹框的初始样式不太好看,而公司要求又要好看,本来是已经实现了,但是后来想想了发现封装完dialog的其他功能也要,所以特此记录一下
方案一
思路:封装一个组件,将所有新增的参数引入el-dialog 参数中,实现参数共用
新建一个组件,将官网暴露的属性全部引用了
在这里插入图片描述
main.js

import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'
import ElDialogSp1 from './ElDialogSp1.vue'
const app = createApp(App)

app.use(ElementPlus)
app.component('ElDialogSp1',ElDialogSp1)
app.mount('#app')

ElDialogSp1.vue

<template>
  <el-dialog :title="title" :width="width" :fullscreen="fullscreen" :top="top" :modal="modal" :modal-class="modalClass"
    :append-to-body="appendToBody" :append-to="appendTo" :lock-scroll="lockScroll" :custom-class="customClass"
    :open-delay="openDelay" :close-delay="closeDelay" :close-on-click-modal="closeOnClickModal"
    :close-on-press-escape="closeOnPressEscape" :show-close="showClose" :before-close="beforeClose"
    :draggable="draggable" :overflow="overflow" :center="center" :align-center="alignCenter"
    :destroy-on-close="destroyOnClose" :close-icon="closeIcon" :z-index="ZIndex" :header-aria-level="headerAriaLevel">
    <template v-if="isCommTitle" #header="{ isCommTitle }">
      <span :key="isCommTitle">{{dialogProps.isCommTitle  }} </span>
    </template>
    <slot></slot>
    <template #footer>
      <span>
        <slot name="footer"></slot>
      </span>
    </template>
  </el-dialog>
</template>
<script setup>
import { defineProps, defineComponent } from 'vue'

import { ElDialog } from 'element-plus'
const dialogProps = defineProps({
  isCommTitle: {
    type: String
  },
})
ElDialog.props = Object.assign(ElDialog.props, { ...dialogProps })
console.log('ElDialog', ElDialog)
defineComponent({
  ...ElDialog,
})
</script>
<style scoped></style>

使用组件

<template>
  <el-button plain @click="dialogVisible = true">
    ElDialogSp1
  </el-button>
  
  <el-button plain @click="dialogVisible1 = true">
    ElDialogSp2
  </el-button>

  <ElDialogSp1 :isCommTitle="'没错我是ElDialogSp1的标题'"  v-model="dialogVisible">
    ElDialogSp1中间内容
    <template #footer>
      <el-button plain @click="dialogVisible = false">
        ElDialogSp1
      </el-button>
    </template>
  </ElDialogSp1>
</template>

<script setup>
import {  ref } from "vue";

const dialogVisible = ref(false);
</script>

在这里插入图片描述

方案二
思路:封装一个组件,组件内部嵌套el-dialog,然后定义好公共样式,定义好方法,直接使用
缺陷:因为很多属性定义好了,导致如果超出既定样式的方案就得重新调整代码
main.js

import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'
import ElDialogSp2 from './ElDialogSp2.vue'
const app = createApp(App)
app.use(ElementPlus)
app.component('ElDialogSp2',ElDialogSp2)
app.mount('#app')

ElDialogSp2.vue

<template>
  <el-dialog v-model="dialogVisible">
    <template #header="{title}">
     <span :key="title"> {{props.title }}</span>
    </template>
    <slot></slot>
    <template #footer>
      <el-button @click="cancel()">Cancel</el-button>
      <el-button type="primary" @click="confirm()">
        Confirm
      </el-button>
    </template>
  </el-dialog>
</template>

<script setup>
import {  ref,watch,defineProps,defineEmits } from "vue";
const emit = defineEmits(['cancel','confirm'])
const props= defineProps({
  dialogVisible:{
    type:Boolean
  },
  title:{
    type: String
  }
})
const dialogVisible = ref(props.dialogVisible)
function cancel() {
  emit('cancel')
}
function confirm() {
  emit('confirm')
}
watch(()=>props.dialogVisible,(newValue)=>{
  dialogVisible.value = newValue
}) 

</script>

使用组件

<template>
  <el-button plain @click="dialogVisible1 = true">
    ElDialogSp2
  </el-button>
  <ElDialogSp2 @confirm="()=>{dialogVisible1= false![请添加图片描述](https://img-blog.csdnimg.cn/direct/c1418a0e2a644e44bedf8a06cd331d52.gif)
}" 
    @cancel="()=>{dialogVisible1= false}"
    :title="'没错我是ElDialogSp2的标题'"  :dialogVisible="dialogVisible1">
    ElDialogSp2中间内容
  </ElDialogSp2>
</template>

<script setup>
import {  ref } from "vue";
const dialogVisible1 = ref(false);
</script>

效果图
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1686885.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

达梦数据库详解

达梦认证是指针对中国数据库管理系统&#xff08;DBMS&#xff09;厂商达梦公司所推出的数据库产品&#xff0c;即达梦数据库&#xff08;DMDB&#xff09;&#xff0c;进行的一种官方认证体系。达梦认证旨在验证数据库管理人员对达梦数据库产品的掌握程度&#xff0c;及其在数…

【AD936X】 SDR 版图 欣赏

DIE : 4336x4730 um 的 65 nm 芯片 在顶部金属上&#xff0c;您可以看到 PLL 的电感器和日期代码 - 芯片在推出前两年就已准备就绪&#xff1a; 右下角是主数字块&#xff0c;应该是 128 抽头 FIR 滤波器。在最大放大倍率下&#xff0c;我们可以看到一排排标准单元。它们的放置…

[深度学习]基于yolov8+bytetrack+pyqt5实现车辆进出流量统计+车辆实时测速实现

以前使用过yolov5deepsort实现过车辆进出流量统计车辆实时测速&#xff0c;可以看我往期视频&#xff0c;这回改成yolov8bytetrack实现&#xff0c;实时性更好&#xff0c;原理和原来一样。车流量进出统计车速测量优点&#xff1a; 使用目标检测算法考虑bbox抖动&#xff0c;解…

绿联NAS DXP系列发布:内网穿透技术在私有云的应用分析

5月23日&#xff0c;绿联科技举行了“新一代存储方式未来已来”发布会&#xff0c;发布了绿联NAS私有云DXP系列&#xff08;包括两盘位到八盘位的九款新品&#xff09;以及由绿联科技自研的全新NAS系统UGOS Pro。此次绿联发布的DXP系列九款产品&#xff0c;共有两盘位、四盘位、…

Windows DNS 服务器配置转发器

DNS服务器转发器 在企业中由于自身条件的限制&#xff0c; 可能本身的DNS新能并不是很好&#xff0c;这个时候通过使用转发器功能&#xff0c; 将收到的DNS请求转发给另外一台高性能的DNS服务器&#xff0c;让其做后面的迭代查询。 1. 选择DNS服务器&#xff0c; 右击选择属性…

【LeetCode:496. 下一个更大元素 I + 单调栈】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

windows2008修改远程桌面端口,如何果断修改远程桌面端口,确保系统安全无忧!

在数字化时代的浪潮中&#xff0c;Windows 2008系统以其卓越的稳定性和可靠性&#xff0c;赢得了众多企业和个人的青睐。然而&#xff0c;随着网络安全问题的日益严峻&#xff0c;如何确保远程桌面连接的安全&#xff0c;成为了摆在我们面前的一道难题。今天&#xff0c;我将为…

MySQL的ODBC驱动下载、安装以及配置数据源

下载地址&#xff1a;odbc官方下载地址 MySQL :: Download Connector/ODBC 下载安装ODBC驱动 配置MySQL ODBC 数据源 进入控制面板->系统和安全->Windows工具 Data Source Name填写需要生成的ODBC数据源的名称。Description选填。如果使用远程数据库服务器&a…

我怎么使用AI大语言模型学英语

今天已经是我开始英语拉练任务的第39天了&#xff0c;一直在笃定的、雷打不动的、机械笨拙的重复做一件事&#xff0c;那就是使用AI工具&#xff0c;将我想要说的话翻译成英文&#xff0c;生成语音文件&#xff0c;每天朗读三小时&#xff0c;最终整个背下来。我也在思考&#…

使用分水岭算法进行图像分割

文章目录 理论代码 原文路径:opencv-4.6.0\doc\py_tutorials\py_imgproc\py_watershed 目标 在这一章当中&#xff0c; 我们将学习使用分水岭算法使用基于标记的图像分割我们将看到&#xff1a;cv.watershed() 理论 任何灰度图像都可以被视为地形表面&#xff0c;其中高强度…

【面经】单片机

1、单片机IO口工作方式 输入 模拟输入&#xff08;GPIO_Mode_AIN&#xff09;&#xff1a;关闭施密特触发器&#xff0c;将电压信号传送到片上外设模块&#xff0c;通常用于连接模拟信号源。浮空输入&#xff08;GPIO_Mode_IN_FLOATING&#xff09;&#xff1a;在浮空输入状态…

element ui 的密码输入框点击显示隐藏密码时,图标随之改变

场景图&#xff1a; 原理&#xff1a; 通过修改el-input框的type属性&#xff0c;来设置显示或者隐藏。从而改变图标地址。 <el-input class"passwordinput" :type"pwdObj.pwdType" ref"pwdInput" placeholder"密码"v-model"…

VScode C/C++环境安装配置

1. 编译器需要从如下网站下载&#xff1a; MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net 2. 切换到file选项&#xff0c;下拉找到对应的文件版本直接下载&#xff1a; 3. 右键解压到当前文件夹如下&#xff1a; 4. 如图所示复制浏览器上的相应的…

Java 8 Lambda 表达式

目录 出现的背景 外部类 代码 运行 内部类 代码 运行 匿名内部类 代码 运行 Lambda 表达式简介 Lambda 表达式的结构 lambda表达式 代码 运行 什么是功能接口&#xff08;Functional interface&#xff09; 代码 接口 实现类 使用方法重写 使用lambda表达…

解决 fatal: Not a git repository (or any of the parent directories): .git 问题

解决方法&#xff1a;在命令行 输入 git init 然后回车就好了

Aware接口作用

介绍 Aware&#xff08;感知&#xff09;接口是一个标记&#xff0c;里面没有任何方法,实际方法定义都是子接口确定&#xff08;相当于定义了一套规则&#xff0c;并建议子接口中应该只有一个无返回值的方法&#xff09;。 我们知道spring已经定义好了很多对象&#xff0c;如…

深入解析R语言的贝叶斯网络模型:构建、优化与预测;INLA下的贝叶斯回归;现代贝叶斯统计学方法;R语言混合效应(多水平/层次/嵌套)

目录 ①基于R语言的贝叶斯网络模型的实践应用 ②R语言贝叶斯方法在生态环境领域中的应用 ③基于R语言贝叶斯进阶:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析 ④基于R语言的现代贝叶斯统计学方法&#xff08;贝叶斯参数估计、贝叶斯回归、…

Python 实现批量文件重命名工具

在现代软件开发中&#xff0c;图形用户界面 (GUI) 工具的创建是一个常见需求。对于那些需要频繁处理文件的任务&#xff0c;拥有一个简便的 GUI 工具尤为重要。在这篇博客中&#xff0c;我们将介绍如何使用 wxPython 创建一个简单的批量文件重命名工具。该工具可以选择一个文件…

AWS EC2 连接 AWS RDS(Mysql)

1 创建RDS数据库 点击创建数据库 引擎选项 模板 设置 连接 2 EC2连接Mysql $ sudo yum list mariadb* Installed Packages mariadb-connector-c.x86_64 3.1.13-1.amzn2023.0.3 amazonl…

Flutter笔记:Widgets Easier组件库-使用隐私守卫

Flutter笔记 Widgets Easier组件库&#xff1a;使用隐私守卫 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https:…