element-plus使用h和render函数,实现Service弹出Dialog
在element-plus中,Messagebox和Message都实现了全局方法。但是Dialog就没有实现。
本着自己动手丰衣足食的原则。自己动手写一个。
定义一个ModalService.ts文件
import { h, render } from 'vue'
class ModalService {
/**
* 创建一个弹出框
* @param component 组件
* @param opt 配置
*/
static Create(component: any, props: any, opt?: ModalOption,) {
return new Promise((resolve, reject) => {
const close = () => {
render(null, container)
document.body.removeChild(container);
resolve(true)
}
const modelValue = true
const dialogProps = {
modelValue: modelValue,
title: opt?.title,
draggable: opt?.draggable,
destroyOnClose: true,
onClosed: close,
}
const closeHandler = () => {
if (vNode.component?.props.modelValue) {
vNode.component!.props.modelValue = false
}
}
const container = document.createElement('div')
document.body.appendChild(container)
var vNode = h(ElDialog, dialogProps, {
default: () => {
let type = typeof component;
if (type == 'string' || type == 'number') {
return h('div', component)
} else {
return h(component, {
...props,
onClose: closeHandler
})
}
},
header: () => {
if (dialogProps) {
let type = typeof dialogProps.title
if (type == 'string' || type == 'number') {
return h('span', dialogProps.title)
}
return h(dialogProps.title, null)
}
}
});
render(vNode, container)
return vNode.component;
})
}
}
使用
import HelloWorld from "../../../components/HelloWorld.vue"
const test = () => {
ModalService.Create(HelloWorld, { msg: '传递参数' }, { title: '卧槽' }).then(() => {
console.log('成功关闭')
});
}
当然这只是一个demo,很多el-dialog组件的参数和事件没有考虑到。以后有空再完善了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?