当前位置: 首页 > news >正文

将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-dialogvisible={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)}}})

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

http://www.lryc.cn/news/137419.html

相关文章:

  • Windows10批处理命令行设置环境变量笔记,无需重新安装python与chrome
  • 统计学补充概念07-比较树
  • 设计原则 --《设计模式之美》总结篇
  • Day16-蜗牛影城后端开发
  • axios / fetch 实现 stream 流式请求
  • Pytorch学习:torchvison.transforms常用包(ToTensor、Resize、Compose和RandomCrop)
  • 算法通关村十二关 | 字符串转换
  • 前端进阶Html+css09----BFC模型
  • 重排链表(C语言)
  • el-table动态合并单元格
  • html元素
  • push github
  • iFluor 594 Styramide是一种荧光染料,常用于生物分子标记和成像
  • 动态规划入门之01背包变形嗑药
  • 数据结构——栈和队列OJ题
  • 同态排序算法
  • “深入探索JVM内部机制:解析Java虚拟机的工作原理“
  • 为应用程序接入阿里云CDN优化网站访问速度
  • 索引设计规范
  • Appium 2安装与使用java对Android进行自动化测试
  • 小程序运营方式有哪些?如何构建小程序运营框架?
  • 【golang】for语句和switch语句
  • 三、数据库索引
  • 长时间带什么耳机最舒服,分享长时间佩戴舒服的耳机推荐
  • Yolov8小目标检测(1)
  • GPS定位漂移问题分析
  • 前端简介(HTML+CSS+JS)
  • List与String数组互转
  • MySQL中的数据类型
  • python多任务