基于vue-router的matched实现面包屑功能
如上图所示,就是常见的面包屑效果,面包屑的内容一般来说,具有一定的层级关系,就以上图为例,首先是进入首页
,然后点击左侧导航,进入活动管理
下的活动列表
页面,然后点击某一条数据,进入活动详情
页面
这正好与vue-router
的mached
属性所获取的结果有着相似的原理,所以可以基于此来实现面包屑效果!
这里我使用了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实现面包屑功能相关推荐
- Vue动态面包屑功能的实现方法
面包屑应该是我们在项目中经常使用的一个功能,一般情况下它用来表示我们当前所处的站点位置,也可以帮助我们能够更快的回到上个层级. 今天我们就来聊聊如何在 Vue 的项目中实现面包屑功能.以下案例都是使用 ...
- Vue elementUI中的Breadcrumb面包屑
目录 一.前言 二.组件使用 三.总结 一.前言 面包屑用于显示当前页面的路径,快速返回之前的任意页面. 例如: 二.组件使用 elementUI官网的实例十分简单,并没有配合路由来创建面包屑. 但是 ...
- vue + Element UI 动态Breadcrumb 面包屑的制作
文章目录 效果 一.路由配置 二.使用步骤 1.Breadcrumb.vue: 2.在页面中使用 总结 效果 面包屑用于显示当前页面的路径,快速返回之前的任意页面. 一.路由配置 代码如下: impo ...
- vue+elementui最简单的面包屑写法
Vue+Elementui最简单.最完整的面包屑写法 1.创建一个面包屑组件 2.将组件导入主页文件 3.使用面包屑 4.效果图 1.创建一个面包屑组件 1.1.利用路由对象 matched 属性实现 ...
- 基于vue与element实现创建试卷相关功能
由于最近在一个项目中需要实现创建试卷与预览试卷的功能,所以就自己动手写了一个,效果还不错,目前项目已经交付使用,今天就先和大家分享一下创建试卷. 源码已上传至gitee仓库,地址https://git ...
- vue实现留言板的功能_基于vue和bootstrap实现简单留言板功能
本文实例为大家分享了vue实现简单留言板功能的具体代码,供大家参考,具体内容如下 作为一个刚开始接触vue的前端小白,我想在这里记录一些学习过程,希望和大家一起进步,如有不妥处之处,请多多指教呦. 今 ...
- vue实现搜索框搜索新增_基于Vue el-autocomplete 实现类似百度搜索框功能_含真_前端开发者...
效果图如下所示: 首先上代码 让数据触手可及 class="inline-input search-input" v-model="searchContent" ...
- 6.基于vue封装的上传文件等功能
效果图如下: 文件所在位置: view/huge_file_upload/huge_file_upload.vue:(在项目中使用?) <template><div><d ...
- Vue+Element项目实战系列-动态面包屑
面包屑应该是我们在项目中经常使用的一个功能,一般情况下它用来表示我们当前所处的站点位置,也可以帮助我们能够更快的回到上个层级. 今天我们就来聊聊如何在 Vue 的项目中实现面包屑功能.以下案例都是使用 ...
- Vue + ElementUI 动态生成面包屑导航教程
在Web应用程序中,面包屑导航是一种常用的导航方式,它可以帮助用户更好地理解当前页面的位置和层次关系.在Vue项目中,结合ElementUI组件库,我们可以很容易地实现一个动态生成面包屑导航的功能.本 ...
最新文章
- web标准的商业价值
- xen虚拟化实战系列(六)之xen虚拟机破解密码
- 关于OPC自动化接口编程(OPCDAAuto.dll)几点注意问题
- CDH6.3.2之YARN生产环境调优(yarn 生产必做优化项)
- VSCode从非根目录编译golang程序
- 生成器设计模式的应用
- 如何在字符串中添加双引号?
- 计算机组成原理—虚拟存储器的基本概念
- [SpringMVC]SpringMVC学习笔记一: springmvc原理及实例解析.
- SpringBoot作mongodb批量更新
- HBase性能优化方法总结 (转)
- Echarts 全属性 宝典
- Android开发环境
- 新能源汽车入局不易 传第三张牌照花落前途汽车
- ThinkPad E430 蓝牙驱动 BCM43142A0
- 虚拟电厂 3D 可视化,节能减排绿色发展
- 搞定 WeakHashMap 的工作原理一篇文章就够了!!!
- 使用 Python 生成二维码
- Linux下异步IO(libaio)的使用以及性能
- MATLAB代码编写中自定义变量的问题