当前位置:首页 > VUE

vue路由菜单怎么实现

2026-02-24 14:06:09VUE

Vue 路由菜单的实现方法

在 Vue 项目中,可以通过 Vue Router 结合动态菜单数据来实现路由菜单。以下是一种常见的实现方式:

安装 Vue Router

npm install vue-router

配置路由

// router/index.js
import Vue from 'vue'
import Router from 'vue-router'
import Home from '../views/Home.vue'
import About from '../views/About.vue'

Vue.use(Router)

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home,
    meta: {
      title: '首页',
      icon: 'el-icon-house'
    }
  },
  {
    path: '/about',
    name: 'About',
    component: About,
    meta: {
      title: '关于',
      icon: 'el-icon-info'
    }
  }
]

const router = new Router({
  routes
})

export default router

创建菜单组件

<!-- components/Menu.vue -->
<template>
  <div class="menu">
    <el-menu
      :default-active="$route.path"
      router
      mode="horizontal"
    >
      <el-menu-item
        v-for="route in menuRoutes"
        :key="route.path"
        :index="route.path"
      >
        <i :class="route.meta.icon"></i>
        <span>{{ route.meta.title }}</span>
      </el-menu-item>
    </el-menu>
  </div>
</template>

<script>
export default {
  computed: {
    menuRoutes() {
      return this.$router.options.routes.filter(route => route.meta)
    }
  }
}
</script>

在主应用中使用菜单

vue路由菜单怎么实现

<!-- App.vue -->
<template>
  <div id="app">
    <Menu />
    <router-view/>
  </div>
</template>

<script>
import Menu from './components/Menu.vue'

export default {
  components: {
    Menu
  }
}
</script>

动态菜单的实现

对于需要从后端获取菜单数据的场景:

修改菜单组件

<!-- components/DynamicMenu.vue -->
<template>
  <div class="menu">
    <el-menu
      :default-active="$route.path"
      router
    >
      <template v-for="item in menuData">
        <el-submenu
          v-if="item.children"
          :key="item.path"
          :index="item.path"
        >
          <template slot="title">
            <i :class="item.meta.icon"></i>
            <span>{{ item.meta.title }}</span>
          </template>
          <el-menu-item
            v-for="child in item.children"
            :key="child.path"
            :index="child.path"
          >
            {{ child.meta.title }}
          </el-menu-item>
        </el-submenu>
        <el-menu-item
          v-else
          :key="item.path"
          :index="item.path"
        >
          <i :class="item.meta.icon"></i>
          <span>{{ item.meta.title }}</span>
        </el-menu-item>
      </template>
    </el-menu>
  </div>
</template>

<script>
export default {
  data() {
    return {
      menuData: []
    }
  },
  async created() {
    const response = await fetch('/api/menus')
    this.menuData = await response.json()
  }
}
</script>

权限控制菜单

可以通过路由守卫和菜单过滤实现权限控制:

vue路由菜单怎么实现

添加路由守卫

// router/index.js
router.beforeEach((to, from, next) => {
  const hasPermission = checkPermission(to)
  if (!hasPermission) {
    next('/403')
  } else {
    next()
  }
})

function checkPermission(route) {
  // 实现权限检查逻辑
  return true
}

过滤菜单数据

// 在菜单组件中
computed: {
  filteredMenu() {
    return this.menuData.filter(item => {
      return this.$store.state.user.roles.some(role => 
        item.meta.roles.includes(role)
      )
    })
  }
}

多级菜单的实现

对于复杂的多级菜单结构:

// 路由配置示例
{
  path: '/system',
  name: 'System',
  meta: {
    title: '系统管理',
    icon: 'el-icon-setting'
  },
  children: [
    {
      path: 'user',
      name: 'User',
      component: User,
      meta: {
        title: '用户管理'
      }
    },
    {
      path: 'role',
      name: 'Role',
      component: Role,
      meta: {
        title: '角色管理'
      }
    }
  ]
}

以上方法提供了从基础到高级的 Vue 路由菜单实现方案,可以根据项目需求选择适合的方式。

标签: 路由菜单
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

css制作横向菜单

css制作横向菜单

使用浮动(Float)实现横向菜单 将菜单项的 display 属性设置为 float: left,使列表项横向排列。清除浮动避免影响后续布局。 ul.horizontal-menu { li…

css div 制作导航菜单

css div 制作导航菜单

使用 CSS 和 Div 制作导航菜单 导航菜单是网站的重要组成部分,以下是通过 CSS 和 div 元素制作导航菜单的方法。 基本 HTML 结构 创建一个简单的 div 结构作为导航菜单的基础…

vue实现路由守卫

vue实现路由守卫

路由守卫的基本概念 路由守卫是Vue Router提供的一种机制,用于在路由跳转前后执行特定的逻辑。它可以用于权限控制、页面访问限制、数据预加载等场景。Vue Router提供了多种路由守卫,包括全局…

vue实现菜单管理

vue实现菜单管理

Vue 实现菜单管理方案 方案一:基于路由的动态菜单 通过 Vue Router 的路由配置自动生成菜单结构,适用于权限管理系统。在路由元信息(meta)中添加菜单相关配置: const rout…

Vue中实现路由

Vue中实现路由

Vue 路由的实现方法 在 Vue 中实现路由通常使用 Vue Router 库。以下是具体的实现步骤: 安装 Vue Router 通过 npm 或 yarn 安装 Vue Router:…