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

vue3通过el-dropdown实现动态菜单切换页面

这是效果图在这里插入图片描述

首先是主页index.vue

<template><el-row><el-col :span="20"><!-- 顶部菜单 --><div v-if="showTop"><topmenu /></div><!-- 右侧下方区域动态切换的内容 --><div style="flex: 1;"><component :is="currentComponent" /></div></el-col></el-row>
</template><script setup>
import {onMounted, shallowRef} from 'vue';
import Topmenu from "./station/topmenu";const currentComponent = shallowRef(signal);//主动监听事件
onMounted(() => {window.addEventListener('componentChange', (event) => {const component = event.detail;// 在这里处理接收到的组件或其他数据currentComponent.value = component;});
});getStationList()
</script>

接下来是菜单页面menu.vue

<template><div style="width: 100%; margin-top: 10px; display: flex; align-items: center; border-bottom: 1px solid #ccc;"><el-dropdown v-for="(dropdown, index) in dropdowns" :key="index"><el-buttoncolor="#f0f0f0":dark="true"@click="handleSelect(dropdown.id)":style="{ 'background-color': buttonTransparency[dropdown.index] ? 'transparent' : '#f0f0f0' }">{{ dropdown.text }}<el-icon v-if="buttonTransparency[dropdown.index]" class="el-icon--right"></el-icon></el-button><template #dropdown><el-dropdown-menu class="transparent-bg"><el-dropdown-item v-for="(item, i) in dropdown.items" :key="i" @click="handleSelect(item.id)">{{ item.text }}</el-dropdown-item></el-dropdown-menu></template></el-dropdown></div>
</template><script setup>
import {useRouter} from 'vue-router';
import signal from '@/views/drawing/station/index';//这里导入vue页面
import one from '@/views/drawing/test/one';
import two from '@/views/drawing/test/two';const router = useRouter();const buttonTransparency = ref([true, false, false, false, false, false]); // 6个按钮的透明状态const dropdowns = [{id: '1',text: '菜单1',items: [],index: 0},{id: '2',text: '菜单2',items: [{ id: '2-1', text: '子菜单1' },{ id: '2-2', text: '子菜单2' },],index: 1},{id: '3',text: '菜单3',items: [{ id: '3-1', text: '子菜单1' },{ id: '3-2', text: '子菜单2' },],index: 2}
];const handleSelect = (index) => {if (index === '1') {//这里对应菜单idupdateButtonTransparency(0);//这里对应数组下标,从0开始emitComponentChange(signal);//这里对应上面导入的vue页面} else if (index === '2') {updateButtonTransparency(1)} else if (index === '2-1') {emitComponentChange(one);} else if (index === '2-2') {emitComponentChange(two);} else if (index === '3') {updateButtonTransparency(2)}
};const updateButtonTransparency = (index) => {// 点击某个按钮,该按钮的透明状态变化,其他按钮恢复原状buttonTransparency.value = buttonTransparency.value.map((_, i) => i === index);
};const emitComponentChange = (component) => {// 触发自定义事件,传递组件或其他数据const event = new CustomEvent('componentChange', {detail: component});window.dispatchEvent(event);
};</script><style scoped></style>
http://www.lryc.cn/news/248687.html

相关文章:

  • go学习之文件操作与命令行参数
  • 面试题:海量PDF的OCR处理思路
  • [原创][2]探究C#多线程开发细节-“线程的无顺序性“
  • 【精选】Spring整合MyBatis,Junit 及Spring 事务Spring AOP面向切面详解
  • 获取Spring容器Bean工具类
  • 图面试专题
  • VUE的计算属性
  • uniapp中使用pageScrollTo让页面滚动到固定节点或距离
  • 使用机器学习方法进行分析和处理:对高质量图像进行压缩
  • 多线程面试总结
  • android11-隐藏状态栏和导航栏
  • 血的教训--kail系统免密centos7的坑【高版本ssh免密低版本ssh的坑】
  • javaagent字节码增强浅尝
  • 计算机组成原理-Cache替换算法
  • Adobe 家族系列download
  • 97.STL-查找算法 find
  • 如何应对雨天飞行的挑战?无人机机库防护能力解析
  • 机器学习笔记 - 3D数据的常见表示方式
  • 【Node.js】解决npm报错:RequestError: unable to verify the first certificate
  • 语言模型文本处理基石:Tokenizer简明概述
  • 淘宝商品详情数据接口(店铺搬家、数据分析、代购商城、ERP选品、无货源铺货、品牌监控)
  • 面试篇之微服务(一)
  • 智慧科研助力科研数据的分析处理
  • el-select实现分屏效果
  • 微信小程序本地和真机调试文件上传成功但体验版不成功
  • windows系统用nginx部署web应用
  • 如何利用Python进行数据归一化?
  • Linux 基本语句_13_消息队列
  • Maven——仓库
  • Pandas:一个实用高效的Python数据处理库