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

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

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

前言

vue2中我們使用extend方式可以封裝一個全局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

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

總結(jié)

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

相關(guān)文章

最新評論

交城县| 石嘴山市| 肥城市| 古蔺县| 淳化县| 永胜县| 渭源县| 兴文县| 高州市| 新昌县| 安阳市| 东宁县| 曲阳县| 广元市| 淮安市| 玛纳斯县| 龙南县| 通州市| 昔阳县| 金阳县| 兰州市| 常山县| 长治县| 随州市| 乌拉特中旗| 湟中县| 叶城县| 蕉岭县| 昭平县| 霸州市| 犍为县| 西城区| 讷河市| 济南市| 陇川县| 许昌市| 宜良县| 奎屯市| 斗六市| 通渭县| 甘孜|