当前位置: 首页 > news >正文

Vue3 + Vue Router 实现动态面包屑导航(支持点击跳转)

在日常的后台管理系统开发中,面包屑导航 是一个非常常见的功能。它可以清晰地展示用户的访问路径,并且允许用户快速返回上级页面。

本文将介绍如何基于 Vue3 + Vue Router + Ant Design Vue 来实现一个 动态面包屑组件,并支持路径校验和点击跳转。


📌 功能需求

  • 动态生成面包屑
    根据当前路由 path 自动生成层级导航。

  • 路径校验
    只有绑定了组件的路径才允许跳转,否则禁用点击。

  • 高可用
    结合 Ant Design VueBreadcrumb 组件,样式简洁大方。


    🛠 实现思路

  • 使用 useRoute 获取当前路由信息,拆分 path 路径。

  • 结合 nameMap(路径映射名称表),生成对应的面包屑文本。

  • 利用 router.resolve 判断路径是否存在有效组件,从而决定是否可以跳转。

  • 点击面包屑时,调用 router.push 进行页面跳转。


📂 项目文件结构

src/
├── components/
│   └── Breadcrumb.vue         # 面包屑组件
│
├── constants/
│   └── breadcrumb.ts          # 面包屑名称映射表
│
├── views/
│   ├── Home.vue               # 主布局(左侧菜单)
│   │
│   └── AppStore/              # 应用商店
│      ├── index.vue
│      └── Gps-application/    # GPS应用
│           └── index.vue
│   
│
├── router/
│   └── index.ts               # 路由配置
│
└── App.vue

💻 完整代码

<template><div class="breadcrumb" ><a-breadcrumb><a-breadcrumb-itemv-for="(item, index) in breadcrumbs":key="index"@click="onBreadcrumbClick(item, index)":style="{ cursor: item.canNavigate && index !== breadcrumbs.length - 1 ? 'pointer' : 'not-allowed' }">{{ item.label }}</a-breadcrumb-item></a-breadcrumb></div>
</template><script lang="ts" setup>
import { computed } from "vue";
import { useRoute, useRouter } from "vue-router";
import { nameMap } from "../constants/breadcrumb";const router = useRouter();
const route = useRoute();// 判断路径是否绑定组件
const isPathValid = (path: string): boolean => {const resolved = router.resolve(path);const matched = resolved.matched.find(r => r.path === path);return !!(matched && matched.components?.default);
};// 构造面包屑
const breadcrumbs = computed(() => {const result: { label: string; path: string; canNavigate: boolean }[] = [];const segments = route.path.split("/").filter(Boolean);// 去掉 home,只显示 home 后面的路径段const restSegments = segments.slice(1);let currentPath = "/home";for (const seg of restSegments) {currentPath += `/${seg}`;result.push({label: nameMap[seg] || seg,path: currentPath,canNavigate: isPathValid(currentPath),});}return result;
});// 点击面包屑跳转
const onBreadcrumbClick = (item: { path: string; canNavigate: boolean }, index: number) => {if (!item.canNavigate || route.fullPath === item.path) return;router.push(item.path);
};
</script><style scoped lang="less">
.breadcrumb {padding: 20px;
}
</style>

📚 nameMap 示例

constants/breadcrumb.ts 文件中定义路径与显示名称的映射:

export const nameMap: Record<string, string> = {"app-store": "应用商店","Gps-application": "GPS应用",
};

🎨 效果展示

假设当前路由为:

/home/app-store/Gps-application/

则面包屑展示为:

  • 如果路径存在有效组件,鼠标样式为 pointer,点击即可跳转。

  • 如果路径未配置对应组件,鼠标样式为 not-allowed,禁止点击。


✅ 总结

通过以上方法,我们实现了一个 动态可点击的面包屑导航组件,它具备以下优点:

  • 自动根据路由生成,无需手动维护。

  • 路径可读性强,可灵活映射中文名称。

  • 支持路径校验,避免跳转到无效页面。

这种方式在后台管理系统和多层级页面应用中非常实用,大家可以根据自己项目的实际需求进行扩展。

http://www.dtcms.com/a/352943.html

相关文章:

  • Techub News 与 TOKENPOST 达成战略合作以推动中韩 Web3 资讯互通
  • 有鹿机器人如何用科技与创新模式破解行业难题
  • 「LangChain 学习笔记」LangChain大模型应用开发:模型链(Chains)
  • 外汇中高频 CTA 风控策略回测案例
  • 宝塔面板零基础搭建 WordPress 个人博客与外贸网站 | 新手10分钟上手指南
  • 国内股指期货合约的最小变动价位是多少?
  • 大语言模型的“引擎室”:深入剖析现代计算与算法优化
  • 企业落地版 AutoGen 工程示例:自动化市场分析报告生成系统
  • 代码随想录刷题Day42
  • 【芯片低功耗设计中的UPF:从理论到实践详解】
  • windows 子系统 wsl 命令的用法
  • lvgl(一)
  • Java全栈工程师面试实录:从基础到实战的深度技术探索
  • 集成电路学习:什么是YOLO一次性检测器
  • nginx结合lua做转发,负载均衡
  • 解决VSCode中Cline插件的Git锁文件冲突问题
  • 第三章 UI框架设定 流程逻辑
  • 测试分类(超详解)
  • 网络编程-TCP的并发服务器构建
  • FactoryBean接口作用
  • 基于高德地图的怀化旅发精品路线智能规划导航之旅
  • 排放情报平台:驱动绿色未来的技术引擎
  • 优选算法-常见位运算总结
  • 分布式系统架构设计与一致性协议深度解析
  • 深入解析 Chromium Mojo IPC:跨进程通信原理与源码实战
  • 【Qt开发】常用控件(七)-> styleSheet
  • 激活函数只是“非线性开关”?ReLU、Sigmoid、Leaky ReLU的区别与选择
  • Linux 的 git 更换项目仓库源地址
  • 数据对话的“通用语法”:SQL与KingbaseES的智能处理艺术
  • 高并发内存池(11)-PageCache获取Span(下)