将el-dialog封装成函数调用

封装一个函数式调用的el-dialog弹窗组件 【代码】封装一个函数式调用的el-dialog弹窗组件。 阅读详情

1、 使用Vue实例化方法

// MyDialog.js
import Vue from 'vue'
export const openFormDialog = function ({ props = {}, events = {} }) {
  const vm = new Vue({
    data () {
      return {
        form: {}
      }
    },
    render () {
      return (
        <el-dialog
          visible={true}
          {...{ props }}
          {...{ on: events }}
          onClose={() => handleEvent('close')}
        >
          <el-form label-width='80px'>
            <el-form-item label='活动名称'>
              <el-input v-model={this.form.name}></el-input>
            </el-form-item>
            <el-form-item label='活动区域'>
              <el-select v-model={this.form.region} placeholder='请选择活动区域'>
                <el-option label='区域一' value='shanghai'></el-option>
                <el-option label='区域二' value='beijing'></el-option>
              </el-select>
            </el-form-item>
          </el-form>
          <span slot='footer' class="dialog-footer">
            <el-button onClick={() => { handleEvent('cancel') } }>取 消</el-button>
            <el-button type="primary" onClick={() => handleEvent('confirm', this.form) }>确 定</el-button>
          </span>
        </el-dialog>
      )
    }
  }).$mount()

  const close = () => {
    document.body.removeChild(vm.$el)
    vm.$destroy()
  }

  const handleEvent = async (eventName, form) => {
    await events[eventName] && typeof events[eventName] === 'function' && events[eventName](form)
    close()
  }

  document.body.appendChild(vm.$el)
}

2、使用Vue.extend方法

// MyDialog.vue
<template>
  <el-dialog
    :visible.sync="dialogVisible"
    v-bind="options.props"
    v-on="options.events"
  >
    <el-form label-width='80px'>
      <el-form-item label='活动名称'>
        <el-input v-model="form.name"></el-input>
      </el-form-item>
      <el-form-item label='活动区域'>
        <el-select v-model="form.region" placeholder='请选择活动区域'>
          <el-option label='区域一' value='shanghai'></el-option>
          <el-option label='区域二' value='beijing'></el-option>
        </el-select>
      </el-form-item>
    </el-form>
    <span slot="footer" class="dialog-footer">
      <el-button @click="dialogVisible = false">取 消</el-button>
      <el-button type="primary" @click="onConfirm">确 定</el-button>
    </span>
  </el-dialog>
</template>

<script>
export default {
  data () {
    return {
      dialogVisible: true,
      options: {
        props: {
          width: '30%'
        },
        events: {}
      },
      form: {}
    }
  },
  methods: {
    setAttrs (options) {
      this.options = { ...options }
    },
    async onConfirm () {
      await this.options.events.confirm && typeof this.options.events.confirm === 'function' && this.options.events.confirm(this.form)
      this.dialogVisible = false
    }
  }
}
</script>
// MyDialog.js
import Vue from 'vue'
import Dialog from './VDialog.vue'
export const openFormDialog = function (options) {
  const DialogConstructor = Vue.extend(Dialog)
  const instance = new DialogConstructor()
  instance.setAttrs(options)
  instance.$mount()
  document.body.appendChild(instance.$el)
}

3、注册使用

// main.js
import { openFormDialog } from './components/MyDialog.js'
Vue.prototype.$openFormDialog = openFormDialog
// 调用方法
this.$openFormDialog({
   props: {
     title: '测试标题',
     width: '30%',
     beforeClose (done) {
       done()
     }
   },
   events: {
     close () {
       console.log('close')
     },
     cancel () {
       console.log('cancel')
     },
     confirm (form) {
       console.log(form)
     }
   }
 })

以上为简单例子,可根据场景进行优化,期望各位留言告知是否有更好的实现方法

技术分享 | 弹窗开发中,如何使用 Hook 封装 el-dialog? 本文将分享如何使用 useDialog Hook 封装 el-dialog,实现更灵活、更易用的弹窗组件。 阅读详情

相关推荐

实现el-dialog的拖拽,全屏,缩小功能

基于el-dialog, 封装了一下。,实在懒得写,所以直接把代码 粘出来了 大概粘了一下效果。自己体会把。 组件使用 <el-dialog v-dialogDrag ref="xhzqDialog" class="xhzqDialog" :title="title" :fullscreen="isf...

weixin_34138139的博客 8320

el-dialog 封装组件

el-dialog 封装组件

凡尘 2014

VUE封装ElementUI中的Dialog表单弹窗

第一步,我们先搭建好手脚架以及把需要的elementUI也映入进来。 vue的手脚架搭建大家可参考:使用vue-cli搭建vue项目完整版或者官方的网站 elementUI的引入也挺简单的,大家可以直接去官方网站就可以找到引入的方法。 第二步,在components中建立一个vue文件,然后可以去elementUI的官网中把Dialog组件中的表单弹窗复制过来 <template> <div> <el-dialog :modal="t

qq_42391080的博客 5593

dialog组件的封装

dialog组件的封装

weixin_44582077的博客 1711

利用docx4j与docx4j-ImportXHTML高效实现HTML到Word的自动化转换

本文详细介绍了如何利用docx4j与docx4j-ImportXHTML库,在Java环境中高效实现HTML到Word文档的自动化转换。内容涵盖从环境搭建、核心依赖配置,到集成Spring Boot REST API的完整实战流程,并深入解析了处理图片、CSS样式、字体设置以及使用模板保证样式统一等高级技巧与常见问题解决方案,帮助开发者构建稳定的文档自动化生成流水线。

cnn8visionary的博客 365

ADI官方例程HDL和No-OS生成Vivado工程

这一步是选择下载源,一般都是选择国内镜像,因为国外的源太慢了,这里选择阿里的镜像,如果没有这个选项可以在下面的User URL里添加就行,选择好源后然后点击下一步。下一步会从你选择的源上下载软件包目录,如果提示Unable to get setup from https://xxxxxx/,返回上一步,选择别的源,例如第二个163网易的源。然后就是你想要安装在哪了,下面的选项好像会决定环境变量存放在哪,不过一般都是个人电脑选择第一个默认的就行,然后点下一步。下好之后双击打开,就是这个界面了,直接点下一步。

代码匠的博客 3832

elementui el-dialog 的二次封装

在main.js 文件中引入我们的二次疯转组件 如下。

h1606641309的博客 1936

斯坦福大学CS224d基础1:线性代数知识

本文为斯坦福CS229的内容,也是CS224d课程的背景数学知识。概括了在机器学习和深度学习中用到的大部分线性代数知识。为了便于大家查漏补缺,这里根据英文版本整理了一个中文版本。

龙心尘 2万+

vue el-dialog封装成子组件(组件化)

实际开发过程中我们经常听见组件化开发,但在实际开发过程中(没有人审查时)怎么方便来我们有时是因为时间不够,所以把所有代码写在一个页面。当业务逻辑复杂时可能会有1k多行虽然不能要求自己写出高效复用性高的组件,把dialog弹出框写成一个子组件抽走还是可以的当你把表单抽在就会发现代码少了很多。

路虽远行则将至,事虽难做则必成。 5215

win11 使用 QEMU 配置龙芯 3A5000 虚拟环境

win11 使用 QEMU 配置龙芯 3A5000 虚拟环境

一朵花开的时间 6154

量化交易新手必看:如何用Python快速接入XTP极速交易系统(附避坑指南)

本文为量化交易新手提供了使用Python快速接入中泰证券XTP极速交易系统的完整指南。文章详细介绍了XTP系统的微秒级性能优势、与CTP系统的核心区别,并逐步讲解了环境配置、API连接、资金查询、下单撤单等关键步骤,同时分享了网络维护、订单处理等实战避坑技巧,帮助开发者高效对接专业交易柜台。

life6的博客 659

封装dialog的组件(对elementui的el-dialog的二次封装)

今天来说下对elementui的el-dialog对话框进行二次封装。那我为什么要进行封装呢? 我来说一下:我们平常在写一个项目的时候,需要用到弹框非常多,如果我们每个页面写一次,会显得代码很累赘,那么对他们进行封装,就减少了代码的复用性。 先看一下效果 最终的效果就是上面的图片 下面上代码并解释 我一般都是使用的vue父传子props **** 如果对vue的基础不太好的,可以参考:关于组件传值的讲解 这个页面是子组件 <template> <!-- 封装弹框 --> .

weixin_46419373的博客 1万+

如何在huggingface上申请下载使用llama2/3模型

huggingface-cli download --resume-download 模型名称 --local-dir 存放模型的位置 --local-dir-use-symlinks False --resume-download --token token序列号xxxxxxx。登录huggingface,在模型详情页面上,找到这个表单,填写内容,提交申请。需要使用梯子,country填写梯子的位置吧(比如美国)等待一小时左右,会有邮件通知。

a61022706的博客 1万+

vue 中 el-dialog 二次封装

(1)对element-plus的el-dialog进行二次封装,实现自定义对话框宽高、定位、底部按钮,(2)新增功能包括拉伸、全屏,(3)对原本API也带入了封装,包括遮罩层、关闭图标、打开关闭事件回调、按钮事件等。附:我将所有用到的API写在了最下面(第6条)

chouge的博客 2661

93.华为路由器:IPSec加密GRE通道(GRE over IPsec)

IPSec加密GRE通道 由于GRE隧道不提供安全性保障,使用ipsec加密gre隧道是现网中比较常用的VPN部署,它的加密方式分为两种: 可以使用IPsec来加密隧道进行传输,叫做IPsec over GRE; 加密数据流后从隧道传输,称为GRE over IPsec。 下面将配置一个简单的IPsec over GRE实验。 一、搭建模拟环境 首先我们先搭建环境,先根据拓扑图把基本的IP地址配好,然后分别在AR1、AR3加两条静态路由,使得两个公网互通。 [AR1]in g0/0/0 [AR

迷逝 1万+

openpi 入门教程(一)安装、训练、微调与推理

OpenPI是由物理智能团队发布的机器人开源模型和软件包,包含两种主要模型:基于流的扩散视觉-语言-动作模型(VLA)的π₀模型和基于FAST动作标记器的自回归VLA的π₀-FAST模型。这些模型已在超过10,000小时的机器人数据上进行了预训练,并提供了基础模型检查点,支持开箱即用或根据用户数据集进行微调。OpenPI的实验性质意味着它可能不适用于所有平台,但鼓励研究人员和从业者进行创造性实验。运行这些模型需要至少具备NVIDIA GPU,推荐使用RTX 4090或更高规格的显卡。OpenPI支持在Ubu

2506_90492529的博客 5107

el-dialog组件的二次封装

element-ui组件的样式是固定的,比如我们常用的那些组件,table,button,icon,tab等等。当我们需要的样式和element组件有偏差的时候,我们可以通过针对element组件进行二次封装,然后通过Vue.component()方法,定义到全局,来解决我们当前的项目需求。(4)需要长期维护,当官方库最初更新尤其是对封装组件影响较大时,需要对应更新,维护成本较大。(2)封装的组件越来越多,业务能得到实际的解决,并能形成公司独特组件库。(1)有利于紧密贴合业务,提高开发效率。

weixin_43637720的博客 3578

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

el-dialog二次封装——插槽的使用

这是我想放进卡片的内容

m0_56861578的博客 1926

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Element Plus封装el-dialog、el-table、el-select表格对话框,实现单选多选场景。

Element Plus 封装表格对话框组件,实现单选以及多选的场景。

m0_67584973的博客 4005

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【vue3封装element-plus的反馈组件el-drawer、el-dialog】

vue2中封装el-drawer、el-dialog这类反馈类子组件,需要将父组件的visible值传递子组件,并且再通过$emit将关闭弹窗的组件值传回父组件,同事子组件还需要监听父组件传递过来的visible的值,来驱动弹窗显示隐藏,很麻烦,代码也比较臃肿,vue3中实现方案更加简洁、方便,本文主要示例讲解vue3封装element-plus的对话框、抽屉的实现方案,同时会将vue2的实现示例写出,来进行对比,这两个组件实现方案基本一致,顾放在一起说明。

weixin_43637720的博客 1669

Element-UI el-dialog 二次封装复用

我很希望项目中可以多接触一些新东西,实践出真知,对于编程来说就是要多动手,多总结几录,多思考,才能更好的避坑,因为动手了会发现好多你以为的不是你以为的。

Sandy_zhi的博客 3964

【Vue】解决el-dialog作为子组件封装点击显示与隐藏问题

element-ui中的el-dialog组件经常用作嵌套表单来使用,但是当我们把它封装成一个子组件时会发现点击隐藏与显示会出现问题。以下贴出关键代码,希望对大家有帮助,共同学习。 解决代码: el-dialog子组件: <template> <div class="dialog"> <el-dialog title="发布文章" :visible.sync="dialogFormVisible" @close="closeDia

Pulse的博客 6146

el-dialog遇到的问题

3.改上面的问题,把dialog组件自带的关闭按钮去掉了,属性 :show-close="false",我下意识想写成(show-close="false"但是会报错),测试又发现新问题:点击取消按钮可以清空form表单里原来的内容,但是点击空白处对话框也会关闭,此时里面内容不会清空;5.遗留问题:在el-table组件中点击编辑回显到dialog弹框里时,修改某条信息但不保存,关闭对话框后,table表格里的信息是修改后的,需要刷新后才能拿回真实的数据,目前是关闭对话框后重新调取接口;

qq_37120809的博客 3299

封装el-dialog弹窗组件(element-ui)

在开发中经常会基于业务封装各类组件,即使element-ui已经有很多好用的组件了,但还是会不满足日常开发。今天我在开发的时候遇到一个弹窗的功能,这个弹窗在很多地方都需要用到,那当然是要做成一个公共组件啦,弹窗的话就需要用到el-dialog组件 做起来也比较简单,会出问题的地方就是在于在组件里面把弹窗关闭了,也要同步通知到父组件。这里用.sync修饰符可以很方便的做到。具体看代码了 // ...

laishaojiang的博客 1万+

关于Vue封装el-dialog关闭对话框报错问题

Vue2封装el-dialog,关闭弹窗时报错:Prop being mutated: "dialogFormVisible"

有趣愉悦的学习冒险 3255

二次封装 el-dialog 组件:打造更灵活的对话框解决方案

在 Vue 项目中,Element UI 的 `el-dialog` 是一个非常实用的对话框组件。但在实际开发中,我们经常会遇到需要重复设置对话框属性、处理相同逻辑的情况。通过二次封装,我们可以创建一个更灵活、更易用的对话框组件,提高开发效率并保持代码一致性。

专研技术的大学生:会点Java和前端 1209
上一篇: TypeScript基础使用教程
下一篇: vue移动端实现调起摄像头扫描二维码功能
kaiup
博客等级 码龄7年 32粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值