如上图所示,就是常见的面包屑效果,面包屑的内容一般来说,具有一定的层级关系,就以上图为例,首先是进入首页,然后点击左侧导航,进入活动管理下的活动列表页面,然后点击某一条数据,进入活动详情页面

这正好与vue-routermached属性所获取的结果有着相似的原理,所以可以基于此来实现面包屑效果!

这里我使用了elementui的面包屑组件和导航菜单组件,先贴出最后的效果图:

路由配置

项目结构:

侧边导航栏是首页电子数码服装鞋帽页面都会显示的,所以我创建了一个layout组件,将这三个路由的component都指向该组件,并将导航栏和面包屑都写在layout组件中

因为该功能的实现依赖于路由的层级嵌套关系,所以要提前构思好路由的配置,我这里的路由配置如下:

const routes = [//匹配空路由,重定向到根路由{path:'',redirect: '/home',meta:{showInbreadcrumb:false}},//根路由{path:'/home',component: ()=>import('@/views/layout/index.vue'),name:'home',meta:{title:"首页",showInbreadcrumb:true}},//电子数码{path:'/electronics',name:'电子数码',component: ()=>import('@/views/layout/index.vue'),redirect: '/electronics/computer',meta:{title:"电子数码",showInbreadcrumb:true},children:[{path:'computer',name:'computer',component()=>import('@/views/electronics/children/computer/index.vue'),meta:{title:"电脑",showInbreadcrumb:true}},{path:'phone',name:'手机',component: ()=>import('@/views/electronics/children/phone/index.vue'),meta:{title:"手机",showInbreadcrumb:true}},{path:'tv',name:'电视',component: ()=>import('@/views/electronics/children/tv/index.vue'),meta:{title:"电视",showInbreadcrumb:true}}]},//服装鞋帽{path:'/clothing',name:'服装鞋帽',component: ()=>import('@/views/layout/index.vue'),redirect: '/clothing/tops',meta:{title:"服装鞋帽",showInbreadcrumb:true},children:[{path:'tops',name:'上装',component:  ()=>import('@/views/clothing/children/tops/index.vue'),meta:{title:"上装",showInbreadcrumb:true}},{path:'lower',name:'下装',component:  ()=>import('@/views/clothing/children/lower/index.vue'),meta:{title:"下装",showInbreadcrumb:true}},{path:'shoes',name:'鞋子',component:  ()=>import('@/views/clothing/children/shoes/index.vue'),meta:{title:"鞋子",showInbreadcrumb:true}}]},//放在最后,当前面所有路由都没匹配到时,会匹配该路由,并重定向到根路由{path:'*',redirect:'/',meta:{showInbreadcrumb:false} },
]

这里我配置的路由有首页、电子数码、服装鞋帽,这三个是一级路由,其中电子数码服装鞋帽还有二级路由,在meta中我自定义了数据,showInbreadcrumb用于判断是否显示在面包屑中,title为在面包屑显示的名称

获取路由信息

模板部分:

///src/views/layout/index.vue
<template><div class="layout"><!-- 侧边导航栏 --><div class="sideMenu"><el-menudefault-active="0"class="el-menu-vertical-demo"><div v-for="(item,index) in routes" :key="index" :index="index+''"><!-- 没有二级菜单的 --><el-menu-item  v-if="!item.children"><router-link :to="{name:item.name}">{{item.meta.title}}</router-link></el-menu-item><!-- 有二级菜单的 --><el-submenu  v-else><template slot="title">{{item.meta.title}}</template><el-menu-item  v-for="(item_,index_) in item.children" :key="index_" :index="index+'-'+index_"><router-link :to="{name:item_.name}">{{item_.meta.title}}</router-link></el-menu-item></el-submenu></div></el-menu></div><div class="content"><!-- 面包屑 --><div class="breadcrumb"><el-breadcrumb separator-class="el-icon-arrow-right"><el-breadcrumb-item v-for="(item,index) in breadcrumb" :key="index" :to="{ path: item.path}">{{item.meta.title}}</el-breadcrumb-item></el-breadcrumb></div><!-- 路由出口 --><router-view></router-view></div></div>
</template>

js部分:

export default {data(){return{}},computed:{// 侧边导航数据routes(){// 从$router.options中获取所有路由信息并过滤return this.$router.options.routes.filter((item)=>{return item.meta.showInbreadcrumb});},// 面包屑数据breadcrumb(){// 根据路由配置meta中的showInbreadcrumb字段过滤let matchedArr = this.$route.matched.filter((item)=>{return item.meta.showInbreadcrumb});// 因为首页比较特殊,必须一直显示在面包屑第一个,如果没有首页路由信息,手动添加到最前面if(matchedArr[0].meta.title !== '首页'){matchedArr.unshift({path:'/home',meta:{  title:"首页",showInbreadcrumb:true}},)}return matchedArr;},}
}

注意:拿到this.$route.matched后,不能在其结果上直接追加然后再过滤,否则会页面错乱并且报错,应该先filter,这样会返回一个新的数组,然后再判断追加首页信息

最终效果

基于vue-router的matched实现面包屑功能相关推荐

  1. Vue动态面包屑功能的实现方法

    面包屑应该是我们在项目中经常使用的一个功能,一般情况下它用来表示我们当前所处的站点位置,也可以帮助我们能够更快的回到上个层级. 今天我们就来聊聊如何在 Vue 的项目中实现面包屑功能.以下案例都是使用 ...

  2. Vue elementUI中的Breadcrumb面包屑

    目录 一.前言 二.组件使用 三.总结 一.前言 面包屑用于显示当前页面的路径,快速返回之前的任意页面. 例如: 二.组件使用 elementUI官网的实例十分简单,并没有配合路由来创建面包屑. 但是 ...

  3. vue + Element UI 动态Breadcrumb 面包屑的制作

    文章目录 效果 一.路由配置 二.使用步骤 1.Breadcrumb.vue: 2.在页面中使用 总结 效果 面包屑用于显示当前页面的路径,快速返回之前的任意页面. 一.路由配置 代码如下: impo ...

  4. vue+elementui最简单的面包屑写法

    Vue+Elementui最简单.最完整的面包屑写法 1.创建一个面包屑组件 2.将组件导入主页文件 3.使用面包屑 4.效果图 1.创建一个面包屑组件 1.1.利用路由对象 matched 属性实现 ...

  5. 基于vue与element实现创建试卷相关功能

    由于最近在一个项目中需要实现创建试卷与预览试卷的功能,所以就自己动手写了一个,效果还不错,目前项目已经交付使用,今天就先和大家分享一下创建试卷. 源码已上传至gitee仓库,地址https://git ...

  6. vue实现留言板的功能_基于vue和bootstrap实现简单留言板功能

    本文实例为大家分享了vue实现简单留言板功能的具体代码,供大家参考,具体内容如下 作为一个刚开始接触vue的前端小白,我想在这里记录一些学习过程,希望和大家一起进步,如有不妥处之处,请多多指教呦. 今 ...

  7. vue实现搜索框搜索新增_基于Vue el-autocomplete 实现类似百度搜索框功能_含真_前端开发者...

    效果图如下所示: 首先上代码 让数据触手可及 class="inline-input search-input" v-model="searchContent" ...

  8. 6.基于vue封装的上传文件等功能

    效果图如下: 文件所在位置: view/huge_file_upload/huge_file_upload.vue:(在项目中使用?) <template><div><d ...

  9. Vue+Element项目实战系列-动态面包屑

    面包屑应该是我们在项目中经常使用的一个功能,一般情况下它用来表示我们当前所处的站点位置,也可以帮助我们能够更快的回到上个层级. 今天我们就来聊聊如何在 Vue 的项目中实现面包屑功能.以下案例都是使用 ...

  10. Vue + ElementUI 动态生成面包屑导航教程

    在Web应用程序中,面包屑导航是一种常用的导航方式,它可以帮助用户更好地理解当前页面的位置和层次关系.在Vue项目中,结合ElementUI组件库,我们可以很容易地实现一个动态生成面包屑导航的功能.本 ...

最新文章

  1. web标准的商业价值
  2. xen虚拟化实战系列(六)之xen虚拟机破解密码
  3. 关于OPC自动化接口编程(OPCDAAuto.dll)几点注意问题
  4. CDH6.3.2之YARN生产环境调优(yarn 生产必做优化项)
  5. VSCode从非根目录编译golang程序
  6. 生成器设计模式的应用
  7. 如何在字符串中添加双引号?
  8. 计算机组成原理—虚拟存储器的基本概念
  9. [SpringMVC]SpringMVC学习笔记一: springmvc原理及实例解析.
  10. SpringBoot作mongodb批量更新
  11. HBase性能优化方法总结 (转)
  12. Echarts 全属性 宝典
  13. Android开发环境
  14. 新能源汽车入局不易 传第三张牌照花落前途汽车
  15. ThinkPad E430 蓝牙驱动 BCM43142A0
  16. 虚拟电厂 3D 可视化,节能减排绿色发展
  17. 搞定 WeakHashMap 的工作原理一篇文章就够了!!!
  18. 使用 Python 生成二维码
  19. Linux下异步IO(libaio)的使用以及性能
  20. MATLAB代码编写中自定义变量的问题

热门文章

  1. C++(opencv)简单拼接两幅图像
  2. Python可视化——随机漫步
  3. 数据分析之实战项目——电商用户行为分析【python】
  4. 元图地图开放平台系统概述
  5. 2022年必备的加密行业术语大全,你了解有多少?
  6. 不是会员不让复制粘贴?看我“三板斧”!
  7. 淮师计算机网络题库,淮阴师范学院(淮师)计算机基础一至六章习题
  8. Gephi最详细安装教程没有之一
  9. JVM堆外内存回收原理
  10. HTML <meta> http-equiv 属性