当前位置: 首页 > news >正文

element ui中父子组件共用一个el-dialog弹窗,切换组件页面弹窗进行关闭

在Element UI中,如果多个父子组件共用一个el-dialog弹窗,并且需要在切换组件页面时关闭弹窗,你可以考虑以下方法来实现:

使用Vuex进行状态管理:

在Vuex中创建一个状态来管理弹窗的显示状态(例如,showDialog)。 在父子组件中都可以访问这个状态,以便共享。
当需要打开或关闭弹窗时,分发对应的Vuex mutation 来更新showDialog状态。
在el-dialog中使用v-if或v-show根据showDialog的值来控制弹窗的显示与隐藏。

// store.js
import Vue from 'vue';
import Vuex from 'vuex';Vue.use(Vuex);export default new Vuex.Store({state: {showDialog: false,},mutations: {toggleDialog(state) {state.showDialog = !state.showDialog;},},
});

在父子组件中使用 mapState 和 mapMutations 来访问和修改 showDialog 状态:

// ParentComponent.vue
<template><div><button @click="toggleDialog">Toggle Dialog</button><child-component></child-component><el-dialog :visible="showDialog" @close="toggleDialog"><!-- 弹窗内容 --></el-dialog></div>
</template><script>
import { mapState, mapMutations } from 'vuex';export default {computed: {...mapState(['showDialog']),},methods: {...mapMutations(['toggleDialog']),},
};
</script>
// ChildComponent.vue
<template><div><button @click="toggleDialog">Toggle Dialog</button></div>
</template><script>
import { mapMutations } from 'vuex';export default {methods: {...mapMutations(['toggleDialog']),},
};
</script>

事件总线:

创建一个事件总线(Event Bus)作为Vue实例,使得不同组件可以通过该事件总线进行通信。
在需要打开或关闭弹窗的地方,触发事件,然后在el-dialog所在的组件中监听这些事件,以控制弹窗的显示与隐藏。

// EventBus.js
import Vue from 'vue';
export default new Vue();

在需要打开或关闭弹窗的地方触发事件:

// ParentComponent.vue
<template><div><button @click="toggleDialog">Toggle Dialog</button><child-component></child-component><el-dialog :visible="showDialog" @close="toggleDialog"><!-- 弹窗内容 --></el-dialog></div>
</template><script>
import EventBus from './EventBus';export default {data() {return {showDialog: false,};},methods: {toggleDialog() {this.showDialog = !this.showDialog;EventBus.$emit('toggle-dialog', this.showDialog);},},
};
</script>
// ChildComponent.vue
<template><div><button @click="toggleDialog">Toggle Dialog</button></div>
</template><script>
import EventBus from './EventBus';export default {methods: {toggleDialog() {EventBus.$emit('toggle-dialog', true);},},
};
</script>

在el-dialog所在的组件中监听事件:

// AnyComponent.vue
<template><el-dialog :visible="showDialog" @close="toggleDialog"><!-- 弹窗内容 --></el-dialog>
</template><script>
import EventBus from './EventBus';export default {data() {return {showDialog: false,};},created() {EventBus.$on('toggle-dialog', (showDialog) => {this.showDialog = showDialog;});},
};
</script>

使用provide和inject:

在父组件中使用provide来提供一个控制弹窗显示的方法,或者提供一个布尔值的ref。
在子组件中使用inject来获取这些提供的数据。
子组件可以调用提供的方法或者监听提供的ref来控制弹窗的显示与隐藏。

在父组件中使用provide来提供一个方法或ref:

// ParentComponent.vue
<template><div><button @click="toggleDialog">Toggle Dialog</button><child-component></child-component><el-dialog :visible="showDialog" @close="toggleDialog"><!-- 弹窗内容 --></el-dialog></div>
</template><script>
export default {provide: {toggleDialog: this.toggleDialog, // 方法showDialogRef: this.showDialogRef, // ref},data() {return {showDialog: false,showDialogRef: ref(false),};},methods: {toggleDialog() {this.showDialog = !this.showDialog;this.showDialogRef.value = this.showDialog;},},
};
</script>

在子组件中使用inject来获取这些提供的数据:

// ChildComponent.vue
<template><div><button @click="toggleDialog">Toggle Dialog</button></div>
</template><script>
import { inject } from 'vue';export default {setup() {const { toggleDialog, showDialogRef } = inject();const toggleDialogInParent = () => {toggleDialog();};return {toggleDialogInParent,showDialogRef,};},
};
</script>
http://www.lryc.cn/news/188095.html

相关文章:

  • 基于Keil a51汇编 —— Segments, Modules, and Programs
  • 基于Java+SpringBoot+Vue民宿管理系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】
  • 【Qt】三种方式实现抽奖小游戏
  • 【算法与数据结构】--算法基础--算法设计与分析
  • vue部分入门知识点代码示例
  • 【图灵】Spring为什么要用三级缓存解决循环依赖问题
  • bert入门
  • 蓝桥杯基础---切面条
  • Spring Data Redis使用方式
  • HarmonyOS/OpenHarmony原生应用开发-华为Serverless认证服务说明(二)
  • 华为数通方向HCIP-DataCom H12-831题库(多选题:241-259)
  • 深度学习在 NumPy、TensorFlow 和 PyTorch 中实现所有损失函数
  • 超低延时直播技术演进之路-进化篇
  • 相机坐标系之间的转换
  • jvm--对象实例化及直接内存
  • 【数据结构与算法】如何对快速排序进行细节优化以及实现非递归版本的快速排序?
  • 【电商API接口的应用:电商数据分析入门】初识Web API(一)
  • 大运新能源天津车展深度诠释品牌魅力 为都市人群打造理想车型
  • 深入浅出:react高阶成分(HOC)的应用
  • 分库分表(3)——ShardingJDBC实践
  • Xcode 15下,包含个推的项目运行时崩溃的处理办法
  • 《安富莱嵌入式周报》第324期:单对以太网技术实战,IROS2023迪士尼逼真机器人展示,数百万模具CAD文件下载,闭环步进电机驱动器,CANopen全解析
  • Kafka集群架构设计原理详解
  • 学习Kotlin编程语言
  • js文字逐个显示
  • 电子沙盘数字沙盘大数据人工智能开发教程第16课
  • dockerfile lnmp 搭建wordpress、docker-compose搭建wordpress
  • 手写模拟SpringBoot核心流程
  • 怒刷LeetCode的第26天(Java版)
  • Linux文件基本权限