vue3+ElementPlus封裝函數(shù)式彈窗組件詳解
需求場景:彈窗組件需要支持自定義的插槽內(nèi)容,刪除的彈窗也要使用這個組件,只是樣式不一樣而已,希望在父組件使用刪除彈窗的時候直接調(diào)用某個方法就可以顯示彈窗
組件模擬 cuDialog
假設(shè)我的彈窗組件有以下的props和事件
- dialogVisible:控制彈窗顯示和隱藏
- title:彈窗的標(biāo)題
- showClose:是否刪除彈窗
- handleClose:彈窗取消的事件
- handleConfirm:彈窗確定的事件
新建一個js文件
這里需要使用vue3的createApp,方法實(shí)現(xiàn)函數(shù)式組件調(diào)用
1.導(dǎo)入需要的彈窗組件
import CuDialog from '@/components/CuDialog.vue'
2.創(chuàng)建兩個全局變量(命名隨意),一個是存儲createApp創(chuàng)建的組件,一個是放組件的dom
let app = null; let div = null;
3.定義兩個方法,一個是顯示彈窗,一個是隱藏彈窗
我這里是把兩個方法放在了一個對象里面,方便頁面的調(diào)用,你們可以根據(jù)自己的喜好自由設(shè)計(jì)
const delMsg = { show:function() {}, hide:function() {} }
4.開始寫顯示彈窗的方法
首先需要確認(rèn)show方法要接收的參數(shù),參數(shù)的話就是前面列舉的那些,三個props和兩個事件
function show(props) { const { title = '溫馨提示', delContent = '確定要刪除所選記錄嗎?', confirm, close } = props; // 創(chuàng)建dom并插入到body中 div = document.createElement('div'); div.setAttribute('id', 'cu-dialog-id'); document.body.appendChild(div); // 創(chuàng)建組件 app = createApp(CuDialog, { title, // 彈窗的標(biāo)題 delContent, // 刪除彈窗的內(nèi)容 dialogVisible: true, // 彈窗顯示或隱藏 showClose: true, // 是否刪除彈窗 // 彈窗組件暴露的取消事件handleClose onHandleClose: () => { close && close(); console.log('觸發(fā)函數(shù)內(nèi)取消事件'); app.unmount(); div.remove(); }, // 彈窗組件暴露的取消事件handleConfirm onHandleConfirm: () => { confirm && confirm(); console.log('觸發(fā)函數(shù)內(nèi)確認(rèn)事件'); } }); app.mount(div); }
5.隱藏彈窗方法
function hide() { app.unmount(); div.remove(); }
6.導(dǎo)出方法
export default delMsg;
使用方法
import delMsg from '@utils/delMessage.js' delMsg.show({title:'彈窗標(biāo)題',delContent:'彈窗的內(nèi)容',confirm:() =>{ console.log('確認(rèn)事件觸發(fā)'); delMsg.hide(); },close:() => { console.log('取消事件觸發(fā)') }})
完整代碼
import CuDialog from '@/components/CuDialog.vue'; let app = null; let div = null; const delMsg = { /** * @param {Object} props * @param {String} title 彈窗的標(biāo)題,不傳默認(rèn) ‘溫馨提示' * @param {String} delContent 彈窗的內(nèi)容,不傳默認(rèn) ‘確定要刪除所選記錄嗎?' * @param {Boolean} autoClose 取消事件是否需要特殊處理,設(shè)置false需要手動調(diào)用hide方法,不傳默認(rèn)true * @param {Function} confirm 彈窗確認(rèn)事件 * @param {Function} close 彈窗關(guān)閉事件 */ show: function (props) { const { title = '溫馨提示', delContent = '確定要刪除所選記錄嗎?', autoClose = true, confirm, close } = props; div = document.createElement('div'); div.setAttribute('id', 'cu-dialog-id'); document.body.appendChild(div); // eslint-disable-next-line vue/one-component-per-file app = createApp(CuDialog, { title, delContent, dialogVisible: true, showClose: true, onHandleClose: () => { close && close(); console.log('觸發(fā)函數(shù)內(nèi)取消事件'); // 如果需要默認(rèn)關(guān)閉,不做任何邏輯處理請將autoClose設(shè)置為true(默認(rèn)就是true) if (autoClose) { app.unmount(); div.remove(); } }, onHandleConfirm: () => { confirm && confirm(); console.log('觸發(fā)函數(shù)內(nèi)確認(rèn)事件'); } }); app.mount(div); }, hide: function () { app.unmount(); div.remove(); } }; export default delMsg;
到此這篇關(guān)于vue3+ElementPlus封裝函數(shù)式彈窗組件詳解的文章就介紹到這了,更多相關(guān)vue ElementPlus彈窗組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue腳手架搭建/idea執(zhí)行vue項(xiàng)目全過程
新建目錄并運(yùn)行命令提示符,通過npm安裝Vue腳手架并查看版本號,接著,使用vue create命令創(chuàng)建Vue項(xiàng)目,選擇所需配置后完成項(xiàng)目創(chuàng)建,創(chuàng)建成功可見Vue文件夾,使用IDEA打開項(xiàng)目,并啟動項(xiàng)目,根據(jù)需求修改初始化界面2024-10-10Vue.js使用$.ajax和vue-resource實(shí)現(xiàn)OAuth的注冊、登錄、注銷和API調(diào)用
這篇文章主要介紹了 Vue.js使用$.ajax和vue-resource實(shí)現(xiàn)OAuth的注冊、登錄、注銷和API調(diào)用,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05elementUI給el-tabs/el-tab-pane添加圖標(biāo)效果實(shí)例
這篇文章主要給大家介紹了關(guān)于elementUI給el-tabs/el-tab-pane添加圖標(biāo)效果實(shí)例的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用elementUI具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2023-07-07Vue項(xiàng)目中vue.config.js常用配置項(xiàng)詳解
在 Vue CLI 創(chuàng)建的項(xiàng)目中,vue.config.js 是核心配置文件,用于定制化構(gòu)建、開發(fā)和部署流程,本文詳細(xì)解析了該文件的常用配置項(xiàng),并結(jié)合代碼示例和表格說明,幫助開發(fā)者高效管理項(xiàng)目配置,提升開發(fā)體驗(yàn),需要的朋友可以參考下2025-04-04