亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue3中結(jié)合ElementPlus實(shí)現(xiàn)彈窗的封裝方式

 更新時(shí)間:2024年01月11日 09:43:31   作者:聶大哥  
這篇文章主要介紹了Vue3中結(jié)合ElementPlus實(shí)現(xiàn)彈窗的封裝方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

繼上篇文章: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)文章

最新評(píng)論