面包屑应该是我们在项目中经常使用的一个功能,一般情况下它用来表示我们当前所处的站点位置,也可以帮助我们能够更快的回到上个层级。

今天我们就来聊聊如何在 Vue 的项目中实现面包屑功能。以下案例都是使用 Element-UI 进行实现。

最笨的方式

首先我们想到的最笨的方法就是在每个需要面包屑的页面中固定写好。

<template><div class="example-container"><el-breadcrumb separator="/"><el-breadcrumb-itemv-for="(item,index) in breadList":key="index":to="{ path: item.path }">{{item.name}}</el-breadcrumb-item></el-breadcrumb></div>
</template>
<script>
export default {name: "Example",data() {return {breadList: [{name: "首页",path: "/home"}, {name: "系统设置",path: "/setting"}, {name: "用户管理",path: "/setting/usermanage"}]};}
};
</script>

如果按照上述方式去实行的话,虽然我们可以完成面包屑的功能,但是它不够灵活,在每个需要的页面添加,带来的维护成本是巨大的。

最主要的是你们的产品天天变需要咋办,还不累死。有人说登哥我就喜欢这么改,只有这样我才会有工作量。

好吧那当我没说,但是我劝你善良,登哥劝你一句,把那些大量重复的工作尽可能的赶紧做完,剩下的时间你才能自由安排,进行充能呀。

否则,你拿什么进步?普通的人总是喜欢抱怨没有时间,而优秀的人就是这么把时间省下来的。他们知道什么事情重要,什么事情不重要。

不过还是有人会说我就想安安静静写写代码,其他的我不想。那也行,不过这样写显然不够逼格。

利用路由元信息

上面的方法,非常的不够逼格,显然不是我们想要的,那我们再来看看第二种实现方式。

我们可以把路径结构配置在 Route meta 属性中。

const router = new Router({routes: [{path: '/example',name: 'example',component: Example,meta: {breadList: [{name: "首页",path: "/home"}, {name: "系统设置",path: "/setting"}, {name: "用户管理",path: "/setting/usermanage"}]}}]
});
export default router;

然后我们直接在页面中使用计算属性获取数据。

<template>//...省略
</template>
<script>
export default {name: "Example",computed: {breadList() {return this.$route.meta.breadList || [];}}
};
</script>

这样也能实现我要想的效果,但是这个还是显得比较冗余,路由数据已经定义好一次结构,还要加上一个专门的面包屑数据,造成代码的重复,还是不够逼格。

那接下来登哥教你一招比较有逼格的。准备好小本本记下来。

路由对象 matched 属性

首先我们先来看看官方对 matched 的介绍。

matched:返回一个数组,包含当前路由的所有嵌套路径片段的路由记录 。

可以看到当我们定义好路由结构以后,我们就可以获取到当前页面的路由记录。

首先我们先创建一个面包屑的组件。

//Breadcrumb.vue
<script>
export default {data() {return {breadList: [] // 路由集合};},watch: {$route() {this.getBreadcrumb();}},methods: {isHome(route) {return route.name === "home";},getBreadcrumb() {let matched = this.$route.matched;//如果不是首页if (!this.isHome(matched[0])) {matched = [{ path: "/home", meta: { title: "首页" } }].concat(matched);}this.breadList = matched;}},created() {this.getBreadcrumb();}
};
</script>

创建完组件之后,在需要的地方注入即可。如果你的网页结构布局合理恰当的话只需要一处引用就可以所有网页使用啦。

真可谓 “一处代码供全局”。

定义的路由信息如下:

const router = new Router({routes: [{path: '/',redirect: '/home'},{path: '/home',name: 'home',component: Home,meta: { title: '首页' }},{path: '/setting',name: "setting",component: () => import('./views/setting/Setting.vue'),redirect: '/setting/user',meta: { title: '系统设置' },children: [{path: 'user',component: () => import('./views/setting/UserMange.vue'),name: 'usermanage',meta: { title: '用户管理' }}, {path: 'message',component: () => import('./views/setting/MesMange.vue'),name: 'mesmanage',meta: { title: '短信管理' }}]},{path: '/example',name: 'example',component: Example,meta: { title: '综合实例' }}]
});
export default router;

可以看到我们非常灵活的实现出我们需要的效果。可能这个功能并没有完善,比如有些页面不需要怎么办?

其实只要我们过滤下数据就可以实现,比如利用 meta 不存在时面包屑数据置空,或者增加一个数据标示面包屑的现实隐藏。等等都是一种思路。小伙伴们不妨发挥自己的想象试试吧。

看十遍不如自己撸一遍。这样很快就能掌握知识点。最后上下效果图给大家观摩。

最后,如果觉得文章不错,对你有所启发,点赞是一种态度也是一种认可。

微信公众号:六小登登,更多干货文章,这里有我的很多故事,欢迎一起交流。


推荐:《Web实战:如何进行视频截图》

Vue+Element项目实战系列-动态面包屑相关推荐

  1. Vue+Element 项目实战(一)

    目录 相关资料 今日目标 1.电商业务概述 2.项目初始化(必须先安装node.js) 3.码云相关操作 4.配置后台项目 5.实现登录功能 补充 相关资料 项目所用到的资源 点我下载 项目源码 ht ...

  2. vue动态面包屑导航的使用

    动态面包屑导航是根据路由中的 matched 获取到的 单独提取出面包屑导航栏组件 <template><el-breadcrumb class="app-breadcru ...

  3. 如何实现带动画的动态面包屑,来看看?

    大家好,我是派大星,最近在自己手动搭建一个后台管理平台,将其命名为 "雷达行动 Radar-Solution" ,在开发的过程中对比了一下其他已经成型的后台解决方案,发现都存在一个 ...

  4. Vue2+VueRouter2+webpack 构建项目实战系列(完整版) - 收录篇

    以下为收录的CSDN博客专家 · 博文系列: Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述 Vue2+VueRouter2+Webpack+ ...

  5. vue.js项目实战运用篇之抖音视频APP-第十一节: 注册登录及验证码功能

    [温馨提示]:若想了解更多关于本次项目实战内容,可转至vue.js项目实战运用篇之抖音视频APP-项目规划中进一步了解项目规划. [项目地址] 项目采用Git进行管理,最终项目将会发布到GitHub中 ...

  6. Android项目实战系列—基于博学谷(六)习题模块

    由于这个模块内容较多,篇幅较长,请耐心阅读. 习题模块分为两个部分 习题列表界面 习题详情界面 一.习题列表界面 1.习题界面 (1).创建习题界面 在res/layout文件夹中,新建一个布局文件, ...

  7. Spring Boot Vue Element入门实战(完结)

    最近给朋友做一个大学运动会管理系统,用作教学案例,正好自己也在自学VUE,决定用spring boot vue做一个简单的系统.vue这个前端框架很火,他和传统的Jquery 编程思路完全不一样,Jq ...

  8. Linux运维企业架构项目实战系列

    Linux运维企业架构项目实战系列 目录 一.全网备份 (一)部署Rsync守护进程 1)服务端(backup) 2)客户端(web01/02/03 nfs01) (二)编写脚本文件 1)客户端脚本编 ...

  9. vue.js项目实战运用篇之抖音视频APP-第一节:项目环境搭建

    [温馨提示]:若想了解更多关于本次项目实战内容,可转至vue.js项目实战运用篇之抖音视频APP-项目规划中进一步了解项目规划. [项目地址] 项目采用Git进行管理,最终项目将会发布到GitHub中 ...

最新文章

  1. codefores 786B. Legacy(最短路,线段树优化拆点,好题)
  2. Fetch -- http请求的另一种姿势
  3. JQUERY 阻止a 标签链接
  4. Android View 事件分发机制详解
  5. 6.7级地震!北海道数据中心陷最长停电危机!
  6. jQuery学习之:Validation表单验证插件
  7. Apache启动错误:could not bind to address[::]:443
  8. 使用ICSharpCode.TextEditor制作一个语法高亮显示的XML编辑器
  9. sessionStorage、localStorage存储api
  10. 手机照片局部放大镜_手机摄影,竟然有3种对焦方式,想拍出专业水准,你必须了解...
  11. Lua4.0 实现#操作,获取table大小
  12. 调查作业时,注意 【 调查深度 】 ,以及总结 【 中间成果物 】
  13. 国家机构评测主流电视:长虹人工智能语音识别第一
  14. 全面解析Oracle等待事件的分类、发现及优化
  15. [LeetCode] Trapping Rain Water II 题解
  16. Paint方法总结(二):着色渲染器Shader
  17. Python实现CarMaker TestRun的泛化
  18. python高斯核函数_python 实现高斯核与卷积过程
  19. css加载中,请稍后....demo示例(整理)
  20. 微信订阅号签到功能_微信公众号积分签到功能怎么添加,怎么制作微信签到赚积分...

热门文章

  1. 【20保研】北京大学前沿交叉学科研究院关于举办2019年交叉学科优秀大学生夏令营的通知...
  2. 无线串口服务器设计,基于无线串口服务器的DNC实验系统设计与开发.pdf
  3. 实验二 :熟悉双绞线水晶头的制作
  4. 计算机辅助药物设计课程,计算机辅助药物设计课程.doc
  5. 完美日记90分钟卖1个亿,网红营销,只要学会这3招!
  6. 滨松产品发布会观后感——液晶硅基空间光调制器LCOS_SLM
  7. Ajax请求导出Excel的问题【ajax不能下载文件】
  8. 纵横填字游戏解题报告
  9. 最常用的大文件传输方法有哪些,小编给你们细说
  10. 【笔记】情绪-同理心训练