最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡(jiǎn)單三步在vue3中實(shí)現(xiàn)全局js調(diào)用彈窗組件(親測(cè)可用)

 更新時(shí)間:2025年08月14日 08:27:01   作者:GD-Frontender  
這篇文章主要介紹了在vue3中實(shí)現(xiàn)全局js調(diào)用彈窗組件的相關(guān)資料,文中通過(guò)創(chuàng)建Dialog.vue組件、index.js導(dǎo)出及main.js注冊(cè),實(shí)現(xiàn)JS調(diào)用彈窗功能,需要的朋友可以參考下

前言

vue2中我們使用extend方式可以封裝一個(gè)全局js方式調(diào)用的彈窗組件

但是vue3中已經(jīng)摒棄了extend方法,那如何在vue3的架構(gòu)中去封裝這樣的組件呢?

第一步編寫組件模板

在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調(diào)用全局彈窗
import Dialog from './components/dialog/index.js'
app.config.globalProperties.$dialog = Dialog

接下來(lái)就可以在vue組件中通過(guò)js方式調(diào)用了?。。?!

總結(jié)

到此這篇關(guān)于在vue3中實(shí)現(xiàn)全局js調(diào)用彈窗組件的文章就介紹到這了,更多相關(guān)vue3全局js調(diào)用彈窗組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

岱山县| 鞍山市| 罗江县| 乐平市| 临安市| 凉城县| 石阡县| 云浮市| 定陶县| 呼伦贝尔市| 陇南市| 淅川县| 彭泽县| 会东县| 杭州市| 嵩明县| 汶上县| 西贡区| 凤凰县| 曲麻莱县| 会东县| 布尔津县| 福泉市| 金坛市| 金华市| 望城县| 八宿县| 屏东县| 盐池县| 尼玛县| 毕节市| 鄂州市| 瑞金市| 依兰县| 木兰县| 宜春市| 祁东县| 辽源市| 泾源县| 江门市| 靖安县|