Vue3中結(jié)合ElementPlus實(shí)現(xiàn)彈窗的封裝方式
繼上篇文章:Vue2中如何優(yōu)雅的實(shí)現(xiàn)dialog的封裝 ,再來(lái)一篇Vue3中的彈窗封裝方式,我們要追逐新的技術(shù),及時(shí)更新自己的知識(shí)庫(kù)。
由于在Vue3中使用的UI是ElementPlus及關(guān)于Vue3的一些新特性,所以彈窗中的寫(xiě)法略有不同。例如控制彈窗顯示的prop值不再是visible
屬性的值進(jìn)行控制,而是改為了 v-model
進(jìn)行綁定變量進(jìn)行使用;
彈窗的頭部插槽、腳部插槽寫(xiě)法根據(jù)vue3的特性,寫(xiě)法不再是slot="footer"
,而是改為v-slot:footer
或#footer
并且只能綁定在template
標(biāo)簽體或者自定義組件身上上。
彈窗組件的編寫(xiě)
<script setup lang="ts"> import { ref, defineEmits, defineExpose } from 'vue' const emit = defineEmits(['confirmDia']) let showDia = ref<boolean>(false) const openDia = (): void => { showDia.value = true } const closeDia = (): void => { showDia.value = false } const confirmDia = (): void => { emit('confirmDia', '彈窗內(nèi)容事件處理完畢,信息傳給父組件。') } // vue3中規(guī)定,使用了 <script setup> 的組件是默認(rèn)私有的: // 一個(gè)父組件無(wú)法訪問(wèn)到一個(gè)使用了 <script setup> 的子組件中的任何東西,除非子組件在其中通過(guò) defineExpose 宏顯式暴露 defineExpose({ openDia, closeDia }) </script>
<template> <el-dialog title="Dialog" @close="closeDia" v-model="showDia" > <template v-slot:footer> <el-button @click="confirmDia" type="primary">確定</el-button> <el-button @click="closeDia" type="primary" plain>取消</el-button> </template> </el-dialog> </template>
父組件中使用彈窗組件
<script setup lang="ts"> import { ref } from 'vue'; import MyDialog from './components/MyDialog.vue' // 聲明一個(gè) ref 來(lái)存放該元素的引用 // 必須和模板里的 ref 同名 // 為了獲取 MyDialog 的類(lèi)型,我們首先需要通過(guò) typeof 得到其類(lèi)型,再使用 TypeScript 內(nèi)置的 InstanceType 工具類(lèi)型來(lái)獲取其實(shí)例類(lèi)型 let dialog = ref<InstanceType<typeof MyDialog> | null>(null) const open = (): void => { dialog.value?.openDia() } const confirmDia = (val: string): void => { console.log(val) dialog.value?.closeDia() } </script>
<template> <MyDialog ref="dialog" @confirmDia="confirmDia"/> <el-button @click="open" type="primary">打開(kāi)彈窗</el-button> </template>
至此,Vue3中一個(gè)完整的自定義彈窗就完成了,具體的寫(xiě)法相比Vue2還是有些差別的。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue如何動(dòng)態(tài)改變列表搜索出關(guān)鍵詞的字體顏色
這篇文章主要介紹了Vue如何動(dòng)態(tài)改變列表搜索出關(guān)鍵詞的字體顏色問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10vue中table多選/單選行,獲取其數(shù)據(jù)方式
這篇文章主要介紹了vue中table多選/單選行,獲取其數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07關(guān)于ELement?UI時(shí)間控件el-date-picker誤差8小時(shí)的問(wèn)題
本文探討了在使用Vue前端框架配合ElementUI開(kāi)發(fā)時(shí),遇到日期時(shí)間選擇器DateTimePicker的時(shí)間同步問(wèn)題,通過(guò)揭示中國(guó)東八區(qū)與格林威治時(shí)間的時(shí)差,作者提供了設(shè)置value-format屬性的解決方案,以確保后端接收到的正確時(shí)間格式2024-08-08vue click.stop阻止點(diǎn)擊事件繼續(xù)傳播的方法
今天小編就為大家分享一篇vue click.stop阻止點(diǎn)擊事件繼續(xù)傳播的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09Vue.js實(shí)現(xiàn)簡(jiǎn)單動(dòng)態(tài)數(shù)據(jù)處理
本篇文章主要介紹了Vue.js實(shí)現(xiàn)簡(jiǎn)單動(dòng)態(tài)數(shù)據(jù)處理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02Vue首頁(yè)界面加載優(yōu)化實(shí)現(xiàn)方法詳解
如果你也遇到在 vue 應(yīng)用中,首頁(yè)加載資源過(guò)多,導(dǎo)致加載緩慢的問(wèn)題,下面的方法也許能幫到你,主要的處理思想是:讓首頁(yè)多余的資源能在需要它的時(shí)候再加載2022-09-09詳解使用Vue.Js結(jié)合Jquery Ajax加載數(shù)據(jù)的兩種方式
本篇文章主要介紹了詳解使用Vue.Js結(jié)合Jquery Ajax加載數(shù)據(jù)的兩種方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01詳解Vue的watch中的immediate與watch是什么意思
這篇文章主要介紹了詳解Vue的watch中的immediate與watch是什么意思,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12