返回顶部
首页 > 资讯 > 精选 >vue+el-element中根据文件名动态创建dialog的方法是什么
  • 280
分享到

vue+el-element中根据文件名动态创建dialog的方法是什么

2023-06-22 05:06:39 280人浏览 安东尼
摘要

这篇文章给大家介绍Vue+el-element中根据文件名动态创建dialog的方法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。背景在项目中使用对话框的通常做法是把对话框封装成组件,在使用的地方引入,然后添加到

这篇文章给大家介绍Vue+el-element中根据文件名动态创建dialog的方法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

背景

项目中使用对话框的通常做法是把对话框封装成组件,在使用的地方引入,然后添加到template,使用visible.sync控制对话框的显示/隐藏,监听confirm事件处理用户点击确定。如下:

 <confirm-dialog     v-if="confirmDialogVisible"     :title="$t(`mineData.tips.deleteDataset`)"     :visible.sync="confirmDialogVisible"     @confirm="confimHandler" ></confirm-dialog>

 在封装的dialog内部也需要在关闭时更新visible,确定时触发confirm事件:

 methods: {    close() {        this.$emit("update:visible", false);    },    confirm() {        this.close();        this.$emit("confirm");    }}

这样的做法不仅仅导致页面初始化时引入所有对话框组件而影响加载速度,更头疼的是页面中引入了很多对话框时,会导致页面很杂乱:需要为每个对话框插入一段html,为每个对话框维护一个单独的visible变量,为每个对话框添加confirm事件监听...

而这些操作大部分是和业务无关的,且这些操作又是极其相似的。

那么,有没有通过js动态创建dialog的方法呢?

createDialog("confirm-dialog.vue");

就像上面这样根据文件名即可打开对话框,不用定义visible及添加一堆html和事件回调,甚至不需要先引入对话框组件!

是不是很简单!心动了吧?看下去吧。

实现

1.封装的/utils/dialoGControl.js

import Vue from 'vue'async function createDialog (fileName, data) {  const dialogsContext = require.context(    '../components', // 定义查找文件的范围    true,    /([a-zA-Z\-0-9]+)\.vue$/, // 定义文件名规则    'lazy'  )  // 查找到传入名字的文件并加载该文件  let match = dialogsContext.keys().find((key) => key.includes(fileName))  if (!match) return  let componentContext = await dialogsContext(match)  let temp = componentContext.default  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)))    component.data = function () {      return initData    }    // 创建构造器创建实例挂载    let DialogC = Vue.extend(component)    let dialog = new DialogC()    // 关闭事件    let _onClose = dialog.$options.methods.onClose    dialog.onClose = function () {      resolve()      dialog.$destroy()      _onClose && _onClose.call(dialog)      document.body.removeChild(dialog.$el)    }    // 回调事件    let _onCallback = dialog.$options.methods.onCallback    dialog.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()    // 点击关闭按钮时会改变visible    dialog.$watch('visible', function (n, o) {      dialog === false && dialog.onClose()    })    document.body.appendChild(dialog.$el)  })}export { createDialog }

说明:
1.需要指定查找文件的路径及匹配名称的正则表达式,这样能过滤掉一些不需要的文件

接收一个fileName参数用于匹配要打开的对话框文件,data参数是传递给对话框的数据,会合并到组件的data中

使用visible变量控制对话框的显示/隐藏

定义了一个onClose方法用于关闭对话框,对话框中可以使用该方法进行关闭

onCallback方法用于向调用对话框的父组件传值,如点击确定按钮时向父组件传值

2.dialog文件定义

如/components/ConfirmDialog.vue,使用visible变量控制显示/隐藏,onClose处理关闭事件,确定按钮的回调是onCallback(和dialogControl.js中的定义一致)。

<template>    <el-dialog title="提示" :visible.sync="visible" width="30%">        <span>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Nesciunt quis            perspiciatis fugiat molestiae provident accusantium repudiandae fugit            minima, eaque, repellat quibusdam iste sed ad? Debitis qui praesentium            minus incidunt esse!</span>        <span slot="footer" class="dialog-footer">            <el-button @click="onClose">取 消</el-button>            <el-button type="primary" @click="onCallback(true)">确 定</el-button>        </span>    </el-dialog></template><script>export default {  data () {    return {}  },  methods: {  }}</script>

 3.使用

 引入dialogControl中的createDialog方法,直接传入文件名称即可打开。

如果有其他的属性,则以键值对的形式放入第二个参数,这些属性会合并到对话框组件的data中,因此对话框组件中可以直接使用这些属性。

createDialog方法得到一个promise对象,其then方法能得到confirm返回的结果。

<template>  <div>    <h2>This is an show page</h2>    <el-button type="primary" @click="openDialog">打开</el-button>  </div></template><script>import { createDialog } from "@/utils/dialogControl";export default {  methods: {    openDialog() {      let dialog = createDialog("confirm-dialog.vue");      dialog.then((v) => {        if (v) {          console.info("确定");        }      });    },  },};</script>

效果如下:

vue+el-element中根据文件名动态创建dialog的方法是什么 

关于vue+el-element中根据文件名动态创建dialog的方法是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: vue+el-element中根据文件名动态创建dialog的方法是什么

本文链接: https://lsjlt.com/news/302798.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • vue+el-element中根据文件名动态创建dialog的方法是什么
    这篇文章给大家介绍vue+el-element中根据文件名动态创建dialog的方法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。背景在项目中使用对话框的通常做法是把对话框封装成组件,在使用的地方引入,然后添加到...
    99+
    2023-06-22
  • vue+el-element中根据文件名动态创建dialog的方法实践
    目录背景实现1.封装的/utils/dialogControl.js2.dialog文件定义 3.使用背景 在项目中使用对话框的通常做法是把对话框封装成组件,在使用的地方引入,然后...
    99+
    2024-04-02
  • eclipse创建文件的方法是什么
    在Eclipse中创建文件有以下几种方法:1. 通过菜单:在Eclipse的工具栏中选择“File” -> “New” -> “Fi...
    99+
    2023-09-21
    eclipse
  • Vue element el-table-column中对日期进行格式化的方法是什么
    这篇文章主要讲解了“Vue element el-table-column中对日期进行格式化的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue e...
    99+
    2023-07-06
  • delphi创建文件夹的方法是什么
    在Delphi中,可以使用`SysUtils`单元中的`CreateDir`函数来创建文件夹。下面是一个示例代码:```delphi...
    99+
    2023-10-08
    delphi
  • python创建空文件的方法是什么
    Python中创建空文件的方法有多种,以下是其中几种常见的方法:1. 使用open()函数创建空文件:```pythonfile =...
    99+
    2023-08-12
    python
  • c++动态创建对象数组的方法是什么
    C++中动态创建对象数组的方法是使用new运算符来分配内存并创建对象。下面是一个简单的示例代码:cppclass MyClass {...
    99+
    2023-10-19
    c++
  • java动态创建定时任务的方法是什么
    Java中动态创建定时任务的方法可以通过使用ScheduledExecutorService接口来实现。ScheduledExecu...
    99+
    2023-08-15
    java
  • vue自定义动态组件的方法是什么
    本篇内容主要讲解“vue自定义动态组件的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue自定义动态组件的方法是什么”吧! Vue.extend 思路就是拿到组件...
    99+
    2023-07-04
  • Linux创建文件命令的方法是什么
    这篇文章主要讲解了“Linux创建文件命令的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux创建文件命令的方法是什么”吧!创建文件夹mkdir aaamkdir -p aa...
    99+
    2023-06-17
  • linux创建空文件夹的方法是什么
    在Linux中,可以通过以下几种方法创建一个空文件夹:1. 使用mkdir命令:```mkdir foldername```这会在当...
    99+
    2023-09-22
    linux
  • ubuntu下创建文件夹的方法是什么
    在Ubuntu操作系统中,可以通过命令行或图形界面来创建文件夹。 命令行方式: 打开终端,使用以下命令来创建文件夹: mkdir...
    99+
    2024-04-02
  • vue下载文件及文件重命名的方法是什么
    这篇文章主要介绍“vue下载文件及文件重命名的方法是什么”,在日常操作中,相信很多人在vue下载文件及文件重命名的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue下载文件及文件重命名的方法是什么...
    99+
    2023-07-04
  • NodeJS创建目录和文件的方法是什么
    本文小编为大家详细介绍“NodeJS创建目录和文件的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“NodeJS创建目录和文件的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。undefined...
    99+
    2023-07-05
  • mysql中创建数据库的方法是什么
    这篇文章给大家分享的是有关mysql中创建数据库的方法是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。 数据库可以看作是一个专门存储数据对象的容器,这里的数据对象包...
    99+
    2024-04-02
  • Vue之el-select结合v-if动态控制template显示隐藏的方法是什么
    这篇“Vue之el-select结合v-if动态控制template显示隐藏的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来...
    99+
    2023-07-06
  • RAC中误将数据文件创建在本地盘时的修正方法是什么
    本篇内容介绍了“RAC中误将数据文件创建在本地盘时的修正方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2024-04-02
  • windows中新建dat文件的方法是什么
    本篇内容主要讲解“windows中新建dat文件的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“windows中新建dat文件的方法是什么”吧! d...
    99+
    2022-12-29
    windows dat文件
  • linux创建文件夹并设置权限的方法是什么
    在Linux下创建文件夹并设置权限的方法如下:1. 创建文件夹:使用mkdir命令创建文件夹,例如:mkdir myfolder其中...
    99+
    2023-05-17
    linux创建文件夹 linux
  • 在Linux中创建自定义脚本和创建systemd服务单元文件的方法是什么
    今天就跟大家聊聊有关在Linux中创建自定义脚本和创建systemd服务单元文件的方法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言systemd是Linux操作系统的系统...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作