简单三步在vue3中实现全局js调用弹窗组件(亲测可用)

 更新时间:2025年08月14日 08:27:01   作者:GD-Frontender  
这篇文章主要介绍了在vue3中实现全局js调用弹窗组件的相关资料,文中通过创建Dialog.vue组件、index.js导出及main.js注册,实现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调用弹窗组件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue2无法监听数组下标和对象新增属性的原因和解决方法

    Vue2无法监听数组下标和对象新增属性的原因和解决方法

    文章详细解释了Vue2中无法监听对象属性新增/删除和数组下标变化的原因,并提供了解决方案,如使用Vue.set和重写数组方法,还对比了Vue3的Proxy,强调了Proxy在监听机制和性能上的优势,需要的朋友可以参考下
    2026-05-05
  • Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件

    Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件

    这篇文章主要介绍了Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • Vue利用动态组件递归渲染实现无限深度树结构

    Vue利用动态组件递归渲染实现无限深度树结构

    这篇文章主要为大家详细介绍了Vue如何利用动态组件递归渲染实现无限深度树结构,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-07-07
  • Vue3+Vite+Nginx部署后刷新404白屏问题的完整排查指南

    Vue3+Vite+Nginx部署后刷新404白屏问题的完整排查指南

    文章详细介绍了Vue单页应用(SPA)首次进入页面正常,一刷新就白屏或404的两种情况及其背后的原因,文章还提供了完整的修复步骤,包括修改Vite打包配置、检查Nginx配置、重新构建并部署等,需要的朋友可以参考下
    2026-03-03
  • vue项目在打包时,如何去掉所有的console.log输出

    vue项目在打包时,如何去掉所有的console.log输出

    这篇文章主要介绍了vue项目在打包时,如何去掉所有的console.log输出,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue计算属性computed、事件、监听器watch的使用讲解

    vue计算属性computed、事件、监听器watch的使用讲解

    今天小编就为大家分享一篇关于vue计算属性computed、事件、监听器watch的使用讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • VUE3+mqtt封装解决多页面使用需重复连接等问题(附实例)

    VUE3+mqtt封装解决多页面使用需重复连接等问题(附实例)

    最近了解到mqtt这样一个协议,可以在web上达到即时通讯的效果,下面这篇文章主要给大家介绍了关于VUE3+mqtt封装解决多页面使用需重复连接等问题的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • 在Vue项目中使用URL Query保存和恢复搜索条件的操作指南

    在Vue项目中使用URL Query保存和恢复搜索条件的操作指南

    在实际的前端开发中,我们经常会遇到这样的需求:用户在列表页输入了一些搜索条件,点击某一条数据进入详情页;当他返回列表页时,希望搜索条件能被 记住,而不是重新初始化,本文给大家介绍了Vue使用URL Query保存和恢复搜索条件的操作指南,需要的朋友可以参考下
    2025-09-09
  • Vue2组件tree实现无限级树形菜单

    Vue2组件tree实现无限级树形菜单

    这篇文章主要为大家详细介绍了Vue2组件tree实现无限级树形菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • 浅析Proxy如何实现Vue响应式

    浅析Proxy如何实现Vue响应式

    这篇文章主要是来和大家探讨一下,Vue的响应式系统仅仅是一个Proxy吗,本文将围绕此问题探索一下Proxy是如何实现Vue响应式的,感兴趣的小伙伴可以了解一下
    2023-08-08

最新评论