简单三步在vue3中实现全局js调用弹窗组件(亲测可用)
前言
vue2中我们使用extend方式可以封装一个全局js方式调用的弹窗组件
但是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组件中通过js方式调用了!!!!
总结
到此这篇关于在vue3中实现全局js调用弹窗组件的文章就介绍到这了,更多相关vue3全局js调用弹窗组件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Vue3+Vite+Nginx部署后刷新404白屏问题的完整排查指南
文章详细介绍了Vue单页应用(SPA)首次进入页面正常,一刷新就白屏或404的两种情况及其背后的原因,文章还提供了完整的修复步骤,包括修改Vite打包配置、检查Nginx配置、重新构建并部署等,需要的朋友可以参考下2026-03-03
vue项目在打包时,如何去掉所有的console.log输出
这篇文章主要介绍了vue项目在打包时,如何去掉所有的console.log输出,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-04-04
vue计算属性computed、事件、监听器watch的使用讲解
今天小编就为大家分享一篇关于vue计算属性computed、事件、监听器watch的使用讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2019-01-01
VUE3+mqtt封装解决多页面使用需重复连接等问题(附实例)
最近了解到mqtt这样一个协议,可以在web上达到即时通讯的效果,下面这篇文章主要给大家介绍了关于VUE3+mqtt封装解决多页面使用需重复连接等问题的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下2023-04-04
在Vue项目中使用URL Query保存和恢复搜索条件的操作指南
在实际的前端开发中,我们经常会遇到这样的需求:用户在列表页输入了一些搜索条件,点击某一条数据进入详情页;当他返回列表页时,希望搜索条件能被 记住,而不是重新初始化,本文给大家介绍了Vue使用URL Query保存和恢复搜索条件的操作指南,需要的朋友可以参考下2025-09-09


最新评论