VueRouter配合Element ui实现导航菜单

1.创建路由

import Vue from 'vue'
import Router from 'vue-router'  // 引入vue-router
import Layout from '../components/Layout/index.vue'

Vue.use(Router)  // 在vue中注入Router
 // 配置路由路径
const routes =[
    {
      path: '/login',
      name: 'login',
      hidden:false,//判断是否显示在导航区
      meta: {
        title: "登录"
      },
      component:() => import('@/views/login/index.vue'),
    },
    {
      path: '/',
      redirect:'/menu',
      hidden:false,
    },
    
    // 导航菜单
    {
      path: '/menu',
      name: 'menu',
      redirect:'/menu/home',
      hidden:true,
      meta: {
        title: "导航"
      },
      component:Layout,
      children:[
        {
          path: 'home',
          name: 'home',
          hidden:true,
          meta: {
            title: "首页"
          },
          component:() => import('@/views/home/index.vue'),
        },
        {
          path: 'page',
          name: 'page',
          hidden:true,
          meta: {
            title: "测试菜单"
          },
          component:() => import('@/views/test/index.vue'),
          children:[
            {
              path: 'pages',
              hidden:true,
              meta: {
                title: "首页"
              },
              component:() => import('@/views/test/index.vue'),
            },
            {
              path: 'test2',
              name: 'test2',
              hidden:true,
              meta: {
                title: "测试2"
              },
              component:() => import('@/views/modular/page/index.vue'),
            }

          ]
        },
      ]
    },  
     
]
// 将路径注入到Router中
var router=new Router({
  'mode': 'hash',
  routes
})
// 导出路由
export default router;

2.导航菜单
先拿到路由对象routerData

getRouter(){
      for (let i = 0; i < this.$router.options.routes.length; i++) {
        if(this.$router.options.routes[i].path == '/menu'){
          this.routerData=this.$router.options.routes[i].children;
        }        
      }
      // this.routerData=this.$router.options.routes[2].children;
    },
  <el-menu
      class="el-menu-vertical-demo"
      @open="handleOpen"
      @close="handleClose"
      background-color="rgb(30 34 45)"
      text-color="#fff"
      router
      active-text-color="#ffd04b"
    >
    <!-- 单 一级 -->
    <div v-for="(item,index) in routerData" :key="index+''">
      <!-- 判断没有子级并且hidden为展示状态 -->
       <el-menu-item  v-if="item.hidden && !item.children" :index="'/menu'+'/'+item.path"> 
        <i class="el-icon-menu"></i>
        <span slot="title">{{item.meta.title}}</span>
      </el-menu-item>
    </div>
    <!-- 嵌套路由 一级 -->
    <div v-for="(item,index) in routerData" :key="index+ '-onl'">
      <!-- 判断有子级并且hidden为展示状态 -->
      <el-submenu   v-if="item.hidden && item.children" :index="item.path">
        <template slot="title">
          <i class="el-icon-location"></i>
          <span>{{item.meta.title}}</span>
        </template>
        <!-- 二级 -->
        <div v-for="(its,indexs) in item.children" :key="indexs+ '-on'">
          <el-menu-item  v-if="its.hidden && !its.children" :index="'/menu'+'/'+item.path+'/'+its.path"> 
            <span slot="title">{{its.meta.title}}</span>
          </el-menu-item>
        </div>

      </el-submenu>
    </div>
      
      
    </el-menu>

效果展示
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值