vue3.2自定義彈窗組件結(jié)合函數(shù)式調(diào)用示例詳解
前言
涉及的vue3知識(shí)點(diǎn)/API,createApp defineProps defineEmits <script setup> v-model
<script setup> 就是 setup 語(yǔ)法糖
defineProps 和 props 用法差不多
defineEmits 聲明可向其父組件觸發(fā)的事件
手寫彈窗組件
很簡(jiǎn)單的彈窗組件,支持設(shè)置標(biāo)題
<script setup>
defineProps({
show: {
type: Boolean,
default: false
},
title: {
type: String,
default: ''
},
message: {
type: String,
default: ''
}
})
</script>
<template>
<div v-if="show" class="dialog-mask flex-center">
<div class="dialog-box">
<div class="dialog-header">{{title}}</div>
<slot><p class="dialog-content">{{message}}</p></slot>
<div class="dialog-footer">
<button class="button dialog-confirm" @click="$emit('update:show', false)">確認(rèn)</button>
</div>
</div>
</div>
</template>
組件調(diào)用
在需要使用的地方引入組件,v-model:show 相當(dāng)于vue2寫法的 :show.sync 前方指路
<script setup>
import { ref } from 'vue'
import Dialog from '@/components/Dialog.vue'
let show = ref(true)
</script>
<template>
<Dialog v-model:show="show" message="這是提示內(nèi)容" title="這是標(biāo)題"></Dialog>
</template>
函數(shù)式調(diào)用
components目錄下新建Dialog.js文件

將上面寫好的組件引入,創(chuàng)建一個(gè)實(shí)例,掛載到body節(jié)點(diǎn)
import { createApp } from 'vue'
import Dialog from '@/components/Dialog.vue'
const createDialog = (message, option = {}) => {
const mountNode = document.createElement('div')
const Instance = createApp(Dialog, {
show: true,
message,
...option,
close: () => {
Instance.unmount(mountNode);
document.body.removeChild(mountNode);
}
})
document.body.appendChild(mountNode)
Instance.mount(mountNode)
}
export default createDialog
createApp 第二個(gè)參數(shù),是傳遞prop給組件,close方法用于點(diǎn)擊確定移除彈窗,所以我們需要改造一下Dialog.vue,改造后的代碼在下面含樣式完整源碼里,改造后就能實(shí)現(xiàn)組件調(diào)用和函數(shù)式調(diào)用合二為一了。
如何使用
<script setup>
import Dialog from '@/components/Dialog.js'
// 無(wú)標(biāo)題
Dialog('500 服務(wù)器錯(cuò)誤,請(qǐng)稍候再試!');
// 有標(biāo)題
Dialog('500 服務(wù)器錯(cuò)誤,請(qǐng)稍候再試!', { title: '提示' });
</script>
含樣式完整源碼
Dialog.vue
<script setup>
defineProps({
show: {
type: Boolean,
default: false
},
title: {
type: String,
default: ''
},
message: {
type: String,
default: ''
},
close: {
type: Function,
default: fun => fun()
}
})
const emit = defineEmits(['update:show'])
const handleClose = () => {
emit('update:show', false)
}
</script>
<template>
<div v-if="show" class="dialog-mask flex-center">
<div class="dialog-box">
<div class="dialog-header">{{title}}</div>
<slot><p class="dialog-content">{{message}}</p></slot>
<div class="dialog-footer">
<button class="button dialog-confirm" @click="close(handleClose)">確認(rèn)</button>
</div>
</div>
</div>
</template>
<style scoped>
.flex-center {
display: flex;
justify-content: center;
align-items: center;
}
.dialog-mask {
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
z-index: 1000;
}
.dialog-box {
background: #fff;
width: 300px;
border-radius: 10px;
overflow: hidden;
}
.dialog-header {
padding-top: 20px;
font-weight: bold;
text-align: center;
}
.dialog-content {
padding: 5px 20px 20px 20px;
font-size: 12px;
text-align: center;
white-space: pre-wrap;
word-wrap: break-word;
}
.dialog-footer {
display: flex;
overflow: hidden;
user-select: none;
border-top: 1px solid #EBEDF0;
}
.button {
display: inline-block;
box-sizing: border-box;
text-align: center;
width: 100%;
line-height: 40px;
background-color: #fff;
}
.button:active {
background-color: #f2f3f5;
}
.dialog-confirm {
color: #409EFF;
}
</style>
效果圖

以上就是vue3.2自定義彈窗組件結(jié)合函數(shù)式調(diào)用示例詳解的詳細(xì)內(nèi)容,更多關(guān)于vue3.2彈窗組件函數(shù)式調(diào)用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于Vue 擼一個(gè)指令實(shí)現(xiàn)拖拽功能
這篇文章主要介紹了Vue 指令實(shí)現(xiàn)拖拽功能,實(shí)現(xiàn)原理很簡(jiǎn)單,文中通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10
詳解vue項(xiàng)目打包后通過(guò)百度的BAE發(fā)布到網(wǎng)上的流程
這篇文章主要介紹了將vue的項(xiàng)目打包后通過(guò)百度的BAE發(fā)布到網(wǎng)上的流程,主要運(yùn)用的技術(shù)是vue+express+git+百度的應(yīng)用引擎BAE。需要的朋友可以參考下2018-03-03
vue中復(fù)用vuex.store對(duì)象的定義
這篇文章主要介紹了vue中復(fù)用vuex.store對(duì)象的定義,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
Vue使用el-tree 懶加載進(jìn)行增刪改查功能的實(shí)現(xiàn)
這篇文章主要介紹了Vue使用el-tree 懶加載進(jìn)行增刪改查,以懶加載的形式展示,目錄根據(jù)需求需要有新增 編輯 刪除 操作以及操作后的刷新樹結(jié)構(gòu),具體實(shí)現(xiàn)代碼跟隨小編一起看看吧2021-08-08
自帶氣泡提示的vue校驗(yàn)插件(vue-verify-pop)
這篇文章主要為大家詳細(xì)介紹了自帶氣泡提示的vue校驗(yàn)插件,vue-verify-pop的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04

