从零开始手把手Vue3+TypeScript+ElementPlus管理后台项目实战九(整体布局02)

使用el-menu和el-sub-menu及el-menu-item导航

src/layout目录下新增components目录,components目录下新增PageSidebar.vue
代码基本思想为:读取router中定义的routes数组,渲染绑定到el-menu。
el-menu和el-sub-menu及el-menu-item的区别,请参考本文最后一个图。

<template>
  <div>
    <el-menu :default-active="defaultActive" router :collapse="isCollapse">
      <template v-for="(item, i) in treeData" :key="item.path">
        <el-sub-menu  :index="item.path" v-if="item.children && item.children.length > 0">
          <template #title>
            <el-icon v-if="item.meta.icon"><component :is="item.meta.icon"></component></el-icon>
            <span>{{ item.name }}</span>
          </template>
          <template v-for="(child, ci) in item.children" :key="ci">
            <el-menu-item :index="child.path">
              <el-icon><component :is="child.meta.icon"></component></el-icon>
              {{ child.name }}
            </el-menu-item>
          </template>
        </el-sub-menu>
      </template>
    </el-menu>
  </div>
</template>
<script setup>
import { computed,ref } from 'vue';
import { useRouter, useRoute } from 'vue-router';
const router = useRouter();
const route = useRoute();

const treeData = router.getRoutes().filter((v) => v.meta && v.meta.requiresAuth);

const defaultActive = computed(() => route.path || treeData.value[0].path)
const isCollapse = ref(false)
</script>


修改布局文件

1717569146435.png

运行测试

1717569238885.png

区分el-menu和el-sub-menu及el-menu-item

1717569380224.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值