相信大家在页面中写了很多基于el-dialog的弹框,尤其是弹框比较多时,显得很臃肿,不利于后期维护,还有一些相似的弹框功能让你复制粘贴感觉很麻烦还要换个名字,讲句实话代码越难维护,越能体现你的价值(不过为了自己舒服还是用一下吧)有个还行的方法动态创建,只需要传数据,然后返回数据就可以了,下面直接贴代码哈哈,我不喜欢讲东西,想看详细一点,看我朋友(也是我的两任同事哈哈)的https://blog.csdn.net/qq_34295211/article/details/107576589?spm=1001.2014.3001.5501

dialog.js

import Vue from 'vue'
function snake2Camel(str, capLower) {let s = str.replace(/[-_](\w)/g, function (x) {return x.slice(1).toUpperCase()})s = s.replace(/^\w/, function (x) {return capLower ? x.toLowerCase() : x.toUpperCase()})return s
}function camel2Snake(str) {return str.replace(/([A-Z])/g, '-$1').toLowerCase()
}const dialogsContext = require.context('../', true, /@([a-zA-Z\-0-9]+)\.vue$/)
const dialogs = dialogsContext.keys().reduce((views, key) => {const fileName = key.match(/@([a-zA-Z\-0-9]+)\.vue$/i)[1]if (!fileName) return viewslet componentName = camel2Snake(fileName)let clsName = snake2Camel(componentName)return Object.assign(views, { [clsName]: dialogsContext(key) })
}, {})const createDialog = function (temp, data, callback) {let opt = {data,callback}let component = Object.assign({}, temp)let initData = {visible: true}Object.assign(initData, component.data())opt.data && Object.assign(initData, JSON.parse(JSON.stringify(opt.data)))component.data = function () {return initData}let DialogC = Vue.extend(component)let dialog = new DialogC()// 关闭事件let _onClose = dialog.$options.methods.onClosedialog.$watch('visible', function (n, o) {dialog === false && dialog.onClose()})dialog.onClose = function () {dialog.$destroy()_onClose && _onClose.call(dialog)document.body.removeChild(dialog.$el)}// 回调事件let _onCallback = dialog.$options.methods.onCallbackdialog.onCallback = function (...arg) {try {_onCallback && _onCallback()if (callback && typeof callback === 'function') {callback.call(this, ...arg, dialog)}} catch (e) {console.log(e)}}dialog.$mount()dialog.$watch('visible', function (n, o) {dialog === false && dialog.onClose()})document.body.appendChild(dialog.$el)
}function createDialogAsync(temp, data) {return new Promise(function (resolve, reject) {let opt = {data}let component = Object.assign({}, temp)let initData = {visible: true}Object.assign(initData, component.data())opt.data && Object.assign(initData, JSON.parse(JSON.stringify(opt.data)))console.log(initData, 'init')component.data = function () {return initData}let DialogC = Vue.extend(component)let dialog = new DialogC()// 关闭事件let _onClose = dialog.$options.methods.onClosedialog.onClose = function () {resolve()dialog.$destroy()_onClose && _onClose.call(dialog)document.body.removeChild(dialog.$el)}// 回调事件let _onCallback = dialog.$options.methods.onCallbackdialog.onCallback = function (...arg) {try {_onCallback && _onCallback()resolve(...arg)dialog.$destroy()_onClose && _onClose.call(dialog)document.body.removeChild(dialog.$el)} catch (e) {console.log(e)}}dialog.$mount()dialog.$watch('visible', function (n, o) {dialog === false && dialog.onClose()})document.body.appendChild(dialog.$el)})
}function init(values) {let dialogComponents = {}if (!values) returnObject.keys(values).forEach((name) => {let ComponentContext = values[name].defaultdialogComponents[name] = function (data, callback) {if (callback && typeof callback === 'function') {return createDialog.call(this, ComponentContext, data, callback)}return createDialogAsync.call(this, ComponentContext, data)}})return dialogComponents
}Vue.prototype.$dialog = init(dialogs)

1.这个js文件直接在main.js引入就完事了

2.第二步新建一个弹框页面文件名@confirm.vue

<template><el-dialog :title="title" :visible.sync="visible" :close-on-click-modal="false"><div>{{text}}</div><div style="margin-top: 10px;">{{newLineText}}</div><div slot="footer" class="dialog-footer"><el-button type="primary" @click="onCallback(true)" v-if="confirmShow">{{confirmText}}</el-button><el-button  @click="onCallback(false)" v-if="cancelShow">{{cancelText}}</el-button></div></el-dialog>
</template><script>export default {data () {return {title: '提示',text: '确定该操作?',confirmText: '确定',cancelText: '取消',confirmShow: 1,cancelShow: 1,newLineText: ''}},methods: {}}
</script>

3、第三步直接使用

      async opt () {let ret = await this.$dialog.Confirm({text: '确定提交?'})if (ret) {console.log(ret,'Dayer')}},

动态创建弹框el-dialog相关推荐

  1. axure rp 创建弹框_如何在Axure RP 9中创建交换机

    axure rp 创建弹框 Axure is a well-known prototyping tool with a lot of history, it has been around for y ...

  2. 用react中的state写一个按钮+弹框的程序

    题目:在页面上有一个按钮,点击按钮出现一个旋转的loading,提交按钮不可点击,等待一秒后弹框显示提交失败或者提交成功,接下来我们直接开始 在此之前,我相信您已经安装好了react运行环境,如何创建 ...

  3. 直播app源代码,android弹框的几种操作

    直播app源代码,实现android弹框几种操作的相关代码 在android中创建文本框:这里是创建了一个list列表式的文本框 package com.example.dialog3;import ...

  4. ASP.NET AJAX Advance Tips Tricks (11) 三种方法动态创建Tooltip

    前言 如何动态创建提示框(Tooltip)是ASP.NET Forum里的常见问题之一,在做技术支持时,我曾在英文博客上总结过ASP.NET和ASP.NET AJAX环境下如何动态创建提示框的三种常见 ...

  5. 原生js如何创建弹出层

    我们会经常遇到需要点击按钮出现弹出层的情况,弹出层和弹窗是不一样的.下面就来讲讲我的创建弹出层的方法. 首先,创建一个按钮,为按钮绑定事件,点击按钮 ,打开弹出层. <button id = & ...

  6. 超过 3K + 的一个开源弹框库,使用方便,功能强大,简直碉堡了

    [公众号回复 "1024",免费领取程序员赚钱实操经验] 今天章鱼猫带领大家来看一个基于 Android 的弹窗库,其实对于做 Android 的兄弟姐妹来讲,各种样式的弹窗,尤其 ...

  7. 练习:LOL 英雄列表(加入弹框修改英雄名称)

    此图是代表ios8前后创建弹框的方法对比: 设置弹框内容: 列表的实现代码就不详细列出了,此处仅对弹框部分实现代码做展示. 调用了  UITableViewDelegate 和   UIAlertVi ...

  8. vue懒加载对话框API封装技巧(项目必备技能,适用于各种需要懒加载动态展示的弹框组件)

    懒加载对话框的方式做到了在你调用弹框展示API的那一刻,才去加载对话框文件并最终显示弹框效果.它最大的意义在于减少了你初次进入页面时加载的文件资源请求量和大小(加载资源小了,网页加载速度自然就提升了) ...

  9. Android 几种弹框样式 自定义Dialog PopupWindow的使用

    1.弹框的波浪线是动态的 和小度弹框样式相似 用到PopWindow 和自定义View . 2.这个弹框是动态的 用于网络加载时候  用到自定义Dialog 3.这就是一简单通用的弹框样式 第一种弹框 ...

最新文章

  1. TestSuite测试报告生成
  2. win10进不了微软服务器,Microsoft帐户无法登录怎么办 Win10微软账户登录不上解决方法...
  3. 二进制安装mysql集群_基于二进制安装Cloudera Manager集群
  4. 函数式编程Map()Reduce()
  5. sublime text3
  6. 浅入深出被人看扁的逻辑回归!
  7. 命令 结构_只需一个命令!从你的U盘里读出更多内容
  8. 用Python计算最长公共子序列和最长公共子串
  9. CentOS7安装配置启动MySQL(附解决password does not satisfy)
  10. PHP如何使用IPFS API用法
  11. java三级分销_java版微信三级分销完整源码
  12. bios 微星click_msi微星主板bios设置方法
  13. rubyinstaller2 32/64位 2.3.3
  14. 设计模式---004策略模式---【巷子】
  15. python驾到~障碍通通闪开,美女批量入内存~
  16. 桌面上计算机程序包能删吗,桌面上的软件怎么删除教程【图文】
  17. 【嵌入式Linux开发一路清障-连载03】Ubuntu22.04使用Mount加载硬盘或NAS等硬盘
  18. 如何解决装修预埋网线网速过慢的问题?
  19. win7共享xp打印机_快速有效的局域网共享方法,十年老技术现身说法亲测可用
  20. 经常玩电脑正确的坐姿_电脑族玩游戏正确坐姿 7要点坐不伤身

热门文章

  1. BP算法误差逆传播参数更新公式推导
  2. 解决office word 2016升级后工具栏无Mathtype
  3. 这 6 款在线 PDF 转换工具,得试试
  4. 手把手教你:基于TensorFlow的语音识别系统
  5. 复旦大学计算机网络专业,复旦大学计算机网络专业计划.doc
  6. 坦克大战第一个不爆炸
  7. 友价源码开发系统如何对接验证码功能?
  8. 物种内共线性分析——JCVI安装以及数据下载(一)
  9. Java实现excel 2003、2007导入功能
  10. MAC vscode 编译多个文件失败(已解决)