vue3递归菜单 如何路由跳转
时间: 2025-01-16 11:55:28 浏览: 43
### Vue3 中实现递归菜单并支持路由跳转
为了实现在 Vue3 中创建递归菜单并且能够正常处理路由跳转,可以采用如下方式:
#### 1. 创建递归组件用于渲染菜单结构
通过定义一个递归组件来展示多级嵌套的菜单项。该组件会检查当前节点是否有子节点,如果有,则继续递归显示这些子节点。
```vue
<template>
<ul v-if="item.children && item.children.length">
<li v-for="(child, index) in item.children" :key="index">
<!-- 如果存在children则递归 -->
<MenuItem :item="child"/>
<!-- 叶子节点链接 -->
<router-link v-else :to="{ name: child.name }">{{ child.title }}</router-link>
</li>
</ul>
<!-- 非叶子节点标题 -->
<span v-else>{{ item.title }}</span>
</template>
<script setup>
import { defineProps } from 'vue';
const props = defineProps({
item: Object,
});
</script>
```
此模板中的 `MenuItem` 组件将会自我调用来构建整个树形结构[^4]。
#### 2. 动态加载路由配置
当应用启动时或用户权限发生变化时,可以根据服务器返回的数据动态添加新的路由规则至路由器实例中。这通常涉及到向已有的静态路由表追加额外路径描述对象。
```javascript
// 假设这是来自API接口获取到的一组菜单及其对应路由信息
const dynamicRoutes = [
{
path: '/dashboard',
component: () => import('@/views/Dashboard.vue'),
children: [
{
path: '',
redirect: 'overview'
},
{
path: 'overview',
name: 'Overview',
meta: { title: '概览' }
},
...
]
},
];
// 将上述路由加入现有路由列表
router.addRoute(dynamicRoutes);
```
需要注意的是,在 Vue Router 4.x 版本之后推荐使用 `addRoute()` 方法替代旧版 API 如 `addRoutes()` [^2].
#### 3. 结合路由守卫控制访问权限
利用全局前置守卫 (`beforeEach`) 或者其他类型的导航守卫机制验证用户的登录状态以及其拥有的角色权限是否允许进入特定页面。对于不符合条件的情况可以选择重定向回登录页或其他提示性视图。
```javascript
router.beforeEach((to, from, next) => {
const hasPermission = checkUserPermissions(to.meta.requiredRoles);
if (!hasPermission) {
next({ name: 'Login', query: { redirect: to.fullPath } });
} else {
next();
}
});
```
以上就是关于如何在 Vue3 应用程序里设置递归菜单并确保各层级间能顺利切换的具体做法[^3]。
阅读全文
相关推荐

















