您好,登錄后才能下訂單哦!
這篇文章主要講解了“vue3如何使用element-plus的dialog”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“vue3如何使用element-plus的dialog”吧!
擺脫繁瑣的 visible 的命名,以及反復的重復 dom。
將 dialog 封裝成一個函數(shù)就能喚起的組件。如下:
addDialog({ title: "測試", //彈窗名 component: TestVue, //組件 width: "400px", //彈窗大小 props: { //傳給組件的參數(shù) id: 0 }, callBack: (data: any) => { //當彈窗任務結束后,調(diào)用父頁面的回掉函數(shù)。(比如我新增完成了需要刷新列表頁面) console.log("回調(diào)函數(shù)", data) } })
// index.ts import { reactive } from "vue" type dialogOptions = { title: string component: any props?: Object width: string visible?: any callBack?: Function } export const dialogList: dialogOptions[] = reactive([]) export const addDialog = (options: dialogOptions) => { dialogList.push(Object.assign(options, { visible: true })) } export const closeDialog = (item: dialogOptions, i: number, args: any) => { dialogList.splice(i, 1) item.callBack && item.callBack(...args) }
<template> <Teleport to="body"> <el-dialog v-for="(item, index) in dialogList" :key="index" :title="item.title" :width="item.width" v-model="item.visible" > <component :is="item.component" v-bind="item.props" @close="(...args:any) => closeDialog(item, index, args)" /> </el-dialog> </Teleport> </template> <script setup lang="ts"> import { dialogList, closeDialog } from "./index" </script>
首先定義了 dialogList,它包含了所有彈窗的信息。
component 使用 componet is 去動態(tài)加載子組件
addDialog 調(diào)用喚起彈窗的函數(shù)
closeDialog 關閉彈窗的函數(shù)
<script setup> import Mydialog from "@/components/gDialog/index.vue" </script> <template> <router-view /> <Mydialog></Mydialog> </template> <style scoped> </style>
<!-- test.vue --> <template> 父彈窗 <el-button type="primary" @click="openChildDialog">打開子dialog</el-button> <el-button type="primary" @click="closeDialog">關閉彈窗</el-button> </template> <script setup lang="ts"> import { addDialog } from "@/components/gDialog/index" import childVue from "./child.vue" const props = defineProps(["id"]) console.log(props.id, "props") const emit = defineEmits(["close"]) const closeDialog = () => { emit("close", 1, 2, 34) } const openChildDialog = () => { addDialog({ title: "我是子dialog", width: "500px", component: childVue }) } </script>
<!-- list.vue --> <template> 列表頁 <el-button type="primary" @click="openDialog">打開dialog</el-button> </template> <script setup lang="ts"> import { addDialog } from "@/components/gDialog/index" import TestDialog from "./test.vue" const openDialog = () => { addDialog({ title: "我是dialog", width: "500px", props:{ id:0 } component: TestDialog, callBack: (data: any) => { //當彈窗任務結束后,調(diào)用父頁面的回掉函數(shù)。(比如我新增完成了需要刷新列表頁面) console.log("回調(diào)函數(shù)", data) } }) }
<!-- child.vue --> <template> 子彈窗 <el-button type="primary" @click="closeDialog">關閉彈窗</el-button> </template> <script setup lang="ts"> import { addDialog } from "@/components/gDialog/index" const emit = defineEmits(["close"]) const closeDialog = () => { emit("close", 1, 2, 34) } </script>
感謝各位的閱讀,以上就是“vue3如何使用element-plus的dialog”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對vue3如何使用element-plus的dialog這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。