Vue3中結合ElementPlus實現(xiàn)彈窗的封裝方式
繼上篇文章:Vue2中如何優(yōu)雅的實現(xiàn)dialog的封裝 ,再來一篇Vue3中的彈窗封裝方式,我們要追逐新的技術,及時更新自己的知識庫。
由于在Vue3中使用的UI是ElementPlus及關于Vue3的一些新特性,所以彈窗中的寫法略有不同。例如控制彈窗顯示的prop值不再是visible
屬性的值進行控制,而是改為了 v-model
進行綁定變量進行使用;
彈窗的頭部插槽、腳部插槽寫法根據(jù)vue3的特性,寫法不再是slot="footer"
,而是改為v-slot:footer
或#footer
并且只能綁定在template
標簽體或者自定義組件身上上。
彈窗組件的編寫
<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', '彈窗內容事件處理完畢,信息傳給父組件。') } // vue3中規(guī)定,使用了 <script setup> 的組件是默認私有的: // 一個父組件無法訪問到一個使用了 <script setup> 的子組件中的任何東西,除非子組件在其中通過 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' // 聲明一個 ref 來存放該元素的引用 // 必須和模板里的 ref 同名 // 為了獲取 MyDialog 的類型,我們首先需要通過 typeof 得到其類型,再使用 TypeScript 內置的 InstanceType 工具類型來獲取其實例類型 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">打開彈窗</el-button> </template>
至此,Vue3中一個完整的自定義彈窗就完成了,具體的寫法相比Vue2還是有些差別的。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
vue中table多選/單選行,獲取其數(shù)據(jù)方式
這篇文章主要介紹了vue中table多選/單選行,獲取其數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07關于ELement?UI時間控件el-date-picker誤差8小時的問題
本文探討了在使用Vue前端框架配合ElementUI開發(fā)時,遇到日期時間選擇器DateTimePicker的時間同步問題,通過揭示中國東八區(qū)與格林威治時間的時差,作者提供了設置value-format屬性的解決方案,以確保后端接收到的正確時間格式2024-08-08vue click.stop阻止點擊事件繼續(xù)傳播的方法
今天小編就為大家分享一篇vue click.stop阻止點擊事件繼續(xù)傳播的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09Vue.js實現(xiàn)簡單動態(tài)數(shù)據(jù)處理
本篇文章主要介紹了Vue.js實現(xiàn)簡單動態(tài)數(shù)據(jù)處理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02詳解使用Vue.Js結合Jquery Ajax加載數(shù)據(jù)的兩種方式
本篇文章主要介紹了詳解使用Vue.Js結合Jquery Ajax加載數(shù)據(jù)的兩種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01詳解Vue的watch中的immediate與watch是什么意思
這篇文章主要介紹了詳解Vue的watch中的immediate與watch是什么意思,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12