Vue3全局掛載Dialog組件的示例代碼
更新時間:2024年12月23日 11:25:34 作者:雨菁ling
Dialog通常是指在Vue.js 3.x版本中使用的對話框組件,它是一個輕量級、易集成的彈窗插件,用于創(chuàng)建通知、確認(rèn)消息、輸入表單等交互場景,最近項目中遇到了全局掛載Dialog的需求,所以本文給大家介紹了Vue3全局掛載Dialog組件的方法,需要的朋友可以參考下
一、背景描述
最近項目中遇到了全局掛載Dialog的需求,在這里記錄一下,希望可以幫到大家。
二、Dialog組件封裝
2.1 Dialog.vue
<template> <!-- 刪除文件對話框 --> <el-dialog :title="dialogTitle" v-model="dialogVisible" :width="dialogWidth" :before-close="handleBeforeClose" > <div>{{ title }}</div> <template #footer> <div class="dialog-footer"> <el-button @click="handleDialogClose">取 消</el-button> <el-button type="primary" :loading="sureBtnLoading" @click="handleDialogSure" >確 定</el-button > </div> </template> </el-dialog> </template> <script setup> import { ref, computed } from 'vue' import { deleteFile } from '@/api/file' import { ElMessage } from 'element-plus'; const props = defineProps({ fileInfo: { type: Array, default: [], }, title: { type: String, default: "", }, width: { type: String, default: "550px", }, saveClick: { type: Function, default: () => {}, }, cancelClick: { type: Function, default: () => {}, }, remove: { type: Function, default: () => {}, } }) const dialogVisible = ref(false) // 窗體顯示控制 const dialogWidth = computed(() => { return props.width || "550px" }) const dialogTitle = computed(() => { return props.title || '刪除文件' }) const title = computed(() => { return '此操作將永久刪除, 是否繼續(xù)?' }) const sureBtnLoading = ref(false) // 關(guān)閉回調(diào)觸發(fā)事件 const handleBeforeClose = (done) => { done() } // 取消按鈕點擊事件 const handleDialogClose = () => { props.cancelClick() props.remove() } // 確定按鈕點擊事件 const handleDialogSure = () => { sureBtnLoading.value = true deleteFile({ id: props.fileInfo.id }) .then((res) => { sureBtnLoading.value = false ElMessage.success(res.data || '刪除成功') props.saveClick() props.remove() }) .catch(() => { sureBtnLoading.value = false }) } </script>
2.2 index.js
import DeleteFileDialog from './Dialog.vue' import { createApp } from 'vue' let mountNode let createMount = (opts) => { if(mountNode){ // 確保只存在一個彈框 document.body.removeChild(mountNode) mountNode = null } mountNode = document.createElement('div') document.body.appendChild(mountNode) const app = createApp(DeleteFileDialog, { ...opts, modelValue: true, remove() { // 傳入remove函數(shù),組件內(nèi)可移除dom 組件內(nèi)通過props接收 app.unmount(mountNode) document.body.removeChild(mountNode) mountNode = null } }) return app.mount(mountNode) } function DeleteFile(options = {}) { options.id = options.id || 'deleteFile_' + 1 //唯一id 刪除組件時用于定位 let $init = createMount(options) return $init } DeleteFile.install = app => { app.component('delete-file-dialog', DeleteFileDialog) app.config.globalProperties.$deleteFileDialog = DeleteFile } export default DeleteFile
三、全局掛載Dialog組件
在main.js中進(jìn)行全局掛載
import DeleteFileDialog from '@/components/dialog/deleteFile/index.js' app.use(DeleteFileDialog)
四、使用Dialog組件
proxy.$deleteFileDialog({ fileInfo: fileInfo, saveClick: () => { console.log('saveClick---') }, cancelClick: () => { console.log('cancelClick---') } })
五、效果圖
到此這篇關(guān)于Vue3全局掛載Dialog組件的示例代碼的文章就介紹到這了,更多相關(guān)Vue3全局掛載Dialog內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Vue3和ApexCharts實現(xiàn)3D徑向條形圖的代碼
徑向條形圖是一種用于可視化單一數(shù)據(jù)點及其與目標(biāo)或理想值的關(guān)系的圖表類型,它在顯示進(jìn)度、完成率或其他類似度量時非常有用,本文給大家介紹了使用Vue3和ApexCharts實現(xiàn)3D徑向條形圖,感興趣的小伙伴可以參考閱讀下2024-06-06vue3成功創(chuàng)建項目后?run?serve啟動項目報錯的解決
這篇文章主要介紹了vue3成功創(chuàng)建項目后?run?serve啟動項目報錯的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03使用WebStorm用Debug模式調(diào)試Vue等前端項目的步驟
WebStorm提供了更簡單的前端調(diào)試方法,記錄一下WebStorm調(diào)試步驟啟動前端項目,這篇文章主要介紹了使用WebStorm用Debug模式調(diào)試Vue等前端項目的步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-11-11vue?內(nèi)置組件?component?的用法示例詳解
這篇文章主要介紹了vue內(nèi)置組件component的用法,本文給大家介紹了component內(nèi)置組件切換方法,通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08vue中element-ui表格縮略圖懸浮放大功能的實例代碼
element-ui界面非常簡潔和美觀,提供的組件可以滿足絕大多數(shù)的應(yīng)用場景,當(dāng)表格中顯示了圖片的縮略圖時,想要鼠標(biāo)浮動在縮略圖上時放大圖片的效果,該如何實現(xiàn)呢?下面小編通過實例代碼給大家介紹vue中element-ui表格縮略圖懸浮放大功能,一起看看吧2018-06-06