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-button
          color="#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') {//这里对应菜单id
    updateButtonTransparency(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>
  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Vue指令`v-show`或者`v-if`来控制`el-dropdown-menu`的显示与隐藏。 使用`v-show`指令,示例代码如下: ``` <el-dropdown> <span class="el-dropdown-link"> 下拉菜单<i class="el-icon-arrow-down el-icon--right"></i> </span> <el-dropdown-menu v-show="showDropdown"> <el-dropdown-item>菜单项一</el-dropdown-item> <el-dropdown-item>菜单项二</el-dropdown-item> <el-dropdown-item>菜单项三</el-dropdown-item> </el-dropdown-menu> </el-dropdown> ``` 在Vue组件中定义`showDropdown`变量,来控制`el-dropdown-menu`的显示与隐藏: ``` <template> <el-dropdown> <span class="el-dropdown-link" @click="showDropdown = !showDropdown"> 下拉菜单<i class="el-icon-arrow-down el-icon--right"></i> </span> <el-dropdown-menu v-show="showDropdown"> <el-dropdown-item>菜单项一</el-dropdown-item> <el-dropdown-item>菜单项二</el-dropdown-item> <el-dropdown-item>菜单项三</el-dropdown-item> </el-dropdown-menu> </el-dropdown> </template> <script> export default { data() { return { showDropdown: false }; } }; </script> ``` 使用`v-if`指令的示例代码如下: ``` <el-dropdown> <span class="el-dropdown-link"> 下拉菜单<i class="el-icon-arrow-down el-icon--right"></i> </span> <el-dropdown-menu v-if="showDropdown"> <el-dropdown-item>菜单项一</el-dropdown-item> <el-dropdown-item>菜单项二</el-dropdown-item> <el-dropdown-item>菜单项三</el-dropdown-item> </el-dropdown-menu> </el-dropdown> ``` 在Vue组件中定义`showDropdown`变量,来控制`el-dropdown-menu`的显示与隐藏: ``` <template> <el-dropdown> <span class="el-dropdown-link" @click="showDropdown = !showDropdown"> 下拉菜单<i class="el-icon-arrow-down el-icon--right"></i> </span> <el-dropdown-menu v-if="showDropdown"> <el-dropdown-item>菜单项一</el-dropdown-item> <el-dropdown-item>菜单项二</el-dropdown-item> <el-dropdown-item>菜单项三</el-dropdown-item> </el-dropdown-menu> </el-dropdown> </template> <script> export default { data() { return { showDropdown: false }; } }; </script> ``` 以上是两种常用的控制`el-dropdown-menu`显示与隐藏的方法,具体使用哪种方法,可以根据实际需求来选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值