vue3怎么使用element-plus的dialog

其他教程   发布日期:2025年04月17日   浏览次数:212

这篇文章主要介绍了vue3怎么使用element-plus的dialog的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue3怎么使用element-plus的dialog文章都会有所收获,下面我们一起来看看吧。

优点

摆脱繁琐的 visible 的命名,以及反复的重复 dom。

想法

将 dialog 封装成一个函数就能唤起的组件。如下:

  1. addDialog({
  2. title: "测试", //弹窗名
  3. component: TestVue, //组件
  4. width: "400px", //弹窗大小
  5. props: {
  6. //传给组件的参数
  7. id: 0
  8. },
  9. callBack: (data: any) => {
  10. //当弹窗任务结束后,调用父页面的回掉函数。(比如我新增完成了需要刷新列表页面)
  11. console.log("回调函数", data)
  12. }
  13. })

基于 el-dialog 进行初步封装

  1. // index.ts
  2. import { reactive } from "vue"
  3. type dialogOptions = {
  4. title: string
  5. component: any
  6. props?: Object
  7. width: string
  8. visible?: any
  9. callBack?: Function
  10. }
  11. export const dialogList: dialogOptions[] = reactive([])
  12. export const addDialog = (options: dialogOptions) => {
  13. dialogList.push(Object.assign(options, { visible: true }))
  14. }
  15. export const closeDialog = (item: dialogOptions, i: number, args: any) => {
  16. dialogList.splice(i, 1)
  17. item.callBack && item.callBack(...args)
  18. }
  1. <template>
  2. <Teleport to="body">
  3. <el-dialog
  4. v-for="(item, index) in dialogList"
  5. :key="index"
  6. :title="item.title"
  7. :width="item.width"
  8. v-model="item.visible"
  9. >
  10. <component :is="item.component" v-bind="item.props" @close="(...args:any) => closeDialog(item, index, args)" />
  11. </el-dialog>
  12. </Teleport>
  13. </template>
  14. <script setup lang="ts">
  15. import { dialogList, closeDialog } from "./index"
  16. </script>
  • 首先定义了 dialogList,它包含了所有弹窗的信息。

  • component 使用 componet is 去动态加载子组件

  • addDialog 调用唤起弹窗的函数

  • closeDialog 关闭弹窗的函数

在app.vue中挂载

  1. <script setup>
  2. import Mydialog from "@/components/gDialog/index.vue"
  3. </script>
  4. <template>
  5. <router-view />
  6. <Mydialog></Mydialog>
  7. </template>
  8. <style scoped>
  9. </style>

使用

创建一个弹窗组件

  1. <!-- test.vue -->
  2. <template>
  3. 父弹窗
  4. <el-button type="primary" @click="openChildDialog">打开子dialog</el-button>
  5. <el-button type="primary" @click="closeDialog">关闭弹窗</el-button>
  6. </template>
  7. <script setup lang="ts">
  8. import { addDialog } from "@/components/gDialog/index"
  9. import childVue from "./child.vue"
  10. const props = defineProps(["id"])
  11. console.log(props.id, "props")
  12. const emit = defineEmits(["close"])
  13. const closeDialog = () => {
  14. emit("close", 1, 2, 34)
  15. }
  16. const openChildDialog = () => {
  17. addDialog({
  18. title: "我是子dialog",
  19. width: "500px",
  20. component: childVue
  21. })
  22. }
  23. </script>

在列表页面唤醒弹窗

  1. <!-- list.vue -->
  2. <template>
  3. 列表页
  4. <el-button type="primary" @click="openDialog">打开dialog</el-button>
  5. </template>
  6. <script setup lang="ts">
  7. import { addDialog } from "@/components/gDialog/index"
  8. import TestDialog from "./test.vue"
  9. const openDialog = () => {
  10. addDialog({
  11. title: "我是dialog",
  12. width: "500px",
  13. props:{
  14. id:0
  15. }
  16. component: TestDialog,
  17. callBack: (data: any) => {
  18. //当弹窗任务结束后,调用父页面的回掉函数。(比如我新增完成了需要刷新列表页面)
  19. console.log("回调函数", data)
  20. }
  21. })
  22. }

多层级弹窗嵌套

  1. <!-- child.vue -->
  2. <template>
  3. 子弹窗
  4. <el-button type="primary" @click="closeDialog">关闭弹窗</el-button>
  5. </template>
  6. <script setup lang="ts">
  7. import { addDialog } from "@/components/gDialog/index"
  8. const emit = defineEmits(["close"])
  9. const closeDialog = () => {
  10. emit("close", 1, 2, 34)
  11. }
  12. </script>

以上就是vue3怎么使用element-plus的dialog的详细内容,更多关于vue3怎么使用element-plus的dialog的资料请关注九品源码其它相关文章!