Vue3中通过JS全局调用弹窗组件的实现方案
作者:云间搭桥时间:2026-10-31 21:34:31浏览:209
本文介绍在Vue3中摒弃extend方法后,如何通过动态创建应用实例的方式实现全局JS调用弹窗组件。详细讲解了Dialog.vue模板编写、index.js中Dialog类的封装以及main.js中的全局注册步骤,提供了一套亲测可用的完整解决方案。
前言
在Vue2架构中,开发者通常利用extend方法封装支持通过JavaScript直接调用的全局弹窗组件。
然而,Vue3已不再支持extend方法,因此需要探索在Vue3新架构下封装此类组件的具体实现路径。
第一步:编写组件模板
首先在components目录下创建名为dialog的文件夹,并在该文件夹内新建Dialog.vue和index.js两个文件。
Dialog.vue文件的具体实现如下:
<template>
<div class="self-dialog">
<el-dialog
v-model="dialogData.show"
:title="dialogData.title"
:close-on-click-modal="false"
:close-on-press-escape="false"
destroy-on-close
:width="dialogData.width"
:before-close="handleClose"
>
<span>{{ dialogData.content }}</span>
<template #footer>
<div class="dialog-footer">
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="handleConfirm">确定</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { inject, getCurrentInstance, computed } from 'vue'
const config = inject('config')
const { proxy } = getCurrentInstance()
const dialogData = computed(() => {
let defaultData = {
show: false,
content: '',
width: '800px',
title: '弹窗',
onConfirm: () => {},
onCancel: () => {}
}
return {
...defaultData,
...config
}
})
const handleClose = () => {
dialogData.value.onCancel()
document.body.removeChild(proxy.$el.parentNode)
}
const handleConfirm = () => {
dialogData.value.onConfirm()
document.body.removeChild(proxy.$el.parentNode)
}
</script>index.js文件负责封装调用逻辑,具体代码如下:
import { createApp } from 'vue'
import dialog from './Dialog.vue'
class Dialog {
constructor() {
this.instance = null
this.mountDom = document.createElement('div')
}
show(options) {
this.instance && this.instance.unmount()
this.instance = createApp(dialog)
this.instance.provide('config', options)
this.instance.mount(this.mountDom)
document.body.appendChild(this.mountDom)
}
hide() {
this.instance && this.instance.unmount()
}
}
export default new Dialog()最后在main.js中进行全局配置,具体代码如下:
// js调用全局弹窗
import Dialog from './components/dialog/index.js'
app.config.globalProperties.$dialog = Dialog完成上述配置后,即可在Vue组件中通过JavaScript方式直接调用弹窗。
总结
以上介绍了在Vue3中实现全局JS调用弹窗组件的方法。如需了解更多相关技术细节,建议查阅本站过往文章或继续浏览后续内容,感谢支持。
作者最新文章
Vue.js 是什么:渐进式 JavaScript 框架的核心优势与适用场景
2026-11-03 20:00:13
为什么JS代码执行了但页面没有跳转
2026-11-03 16:29:09
Vue.js 项目中 Axios 拦截器封装与接口对接实战
2026-11-02 10:22:43
前端PC端自适应开发:两种常见适配方案解析
2026-11-01 03:30:54
Vue3中利用input与audio标签实现音频上传及播放控制
2026-10-31 14:07:34
