vue动态路由实现多级嵌套面包屑的思路与方法


Posted in Javascript onAugust 16, 2017

前言

最近在工作中遇到了一个问题,是关于vue动态路由多级嵌套面包屑怎么弄(不是动态路由嵌套可以尝试用 this.$route.matched方法获取到path和name集合,动态的嵌套获取不到全部具体的id)

功能比如:A列表页面路由如/a,点击任意一列进入任意一个A的详情页面名字为B,/b/03(这个是动态路由弄是吧,03就是id嘛),点击B页面任意一列,再进入B的详情页名字为C,路由如/bdetail/01;现在弄面包屑要获取到的路由是刚刚打开的,如(/a;/b/03;/bdetail/01)

思路:获取所有进入的层级的路由和名称如breadlist=[{path:'/a',name:'一级'},{path:'/b/03',name:'二级'},{path:'/bdetail/01',name:'三级'}] ,然后遍历出来如: <span v-for="(item in breadlist)"><router-link :to="item.path">{{item.name}}</router-link></span>

做法

下面贴出相关代码:

A列表页面跳转按钮:(breadNum记录面包屑层级)

<router-link :to="{path:'/b/'+id,query:{breadNum:2}}"></router-link>

B列表页面跳转按钮:

<router-link :to="{path:'/bbdetail/'+id,query:{breadNum:3}}"></router-link>

breadcrumb.vue页面:

<template>
  <div class="breadbox">
   <span v-for="(item,index) in breadlist" >
    <router-link :to="item.path">{{item.name}}</router-link>
   </span>
  </div>
</template>
<script>
 export default{
  created() {
   this.getBreadcrumb();
  },
  data() {
   return {
    breadlist: '' // 路由集合
   }
  },
  methods: {
   getBreadcrumb() {
    var breadNumber= this.$route.query.breadNum || 1;//url变量breadNum记录层级,默认为1,如果大于1,要添加上变量;
    var breadLength=this.$store.state.breadListState.length;//目前breadlist集合数组个数
    var curName=this.$route.name;
    var curPath=this.$route.fullPath;
    var newBread={name:curName,path:curPath};
    var ishome=curName=='首页';
    console.log(ishome);
    if(breadNumber===1){//点击一级菜单
     this.$store.commit('breadListStateRemove',1);//初始化,只有首页面包屑按钮
     if(!ishome)//如果不是首页
      this.$store.commit('breadListStateAdd',newBread);//当前页面添加到breadlist集合
    }
    else if(breadLength<=breadNumber){//如果不是一级导航,并且breadlist集合个数等于或者小于目前层级
     this.$store.commit('breadListStateAdd',newBread);//要把当前路由添加到breadlist集合
    }else{
     this.$store.commit('breadListStateRemove',parseInt(breadNumber)+1);//如果往回点面包屑导航,截取;
    }
    this.breadlist=this.$store.state.breadListState;
    console.log(this.breadlist);
   }
  },
  watch: {
   $route () {
    this.getBreadcrumb();
   }
  },
 }
</script>

状态管理store.js代码:

export default store = new Vuex.Store({
 state: {
 breadListState:[
  {name:'首页',path:'/'}
 ]
 },
 mutations: {
 breadListStateAdd(state,obj){
  state.breadListState.push(obj);
 },
 breadListStateRemove(state,num){
  state.breadListState=state.breadListState.slice(0,num);
 }
 }

})

路由route.js代码:

{
 path: '/',
 name: '首页',
 component: Main,
 redirect:'/home',
 children:[
  {path: '/a',name: 'A页面',component: APage},
  {path: '/b/:id',name: 'B页面',component: BPage},
  {path: '/bdetail/:id',name: 'C页面',component: CPage},
 ]
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript 数组的 uniq 方法
Jan 23 Javascript
javascript 网页跳转的方法
Dec 24 Javascript
jquery 表单进行客户端验证demo
Aug 24 Javascript
js 页面元素的几个用法总结
Nov 18 Javascript
从QQ网站中提取的纯JS省市区三级联动菜单
Dec 25 Javascript
再次谈论Javascript中的this
Jun 23 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
Jul 11 Javascript
js实现日期显示的一些操作(实例讲解)
Jul 27 Javascript
ES6解构赋值的功能与用途实例分析
Oct 31 Javascript
基于vue通用表单解决方案的思考与分析
Mar 16 Javascript
简述ES6新增关键字let与var的区别
Aug 23 Javascript
Vue和Flask通信的实现
May 19 Vue.js
基于js 本地存储(详解)
Aug 16 #Javascript
基于Vue实例生命周期(全面解析)
Aug 16 #Javascript
基于JQuery的Ajax方法使用详解
Aug 16 #jQuery
angular或者js怎么确定选中ul中的哪几个li
Aug 16 #Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
Aug 16 #Javascript
label+input实现按钮开关切换效果的实例
Aug 16 #Javascript
bootstrap modal+gridview实现弹出框效果
Aug 15 #Javascript
You might like
php+dbfile开发小型留言本
2006/10/09 PHP
php多层数组与对象的转换实例代码
2013/08/05 PHP
PHP把MSSQL数据导入到MYSQL的方法
2014/12/27 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
php array_slice 取出数组中的一段序列实例
2016/11/04 PHP
Div自动滚动到末尾的代码
2008/10/26 Javascript
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
js Dialog 实践分享
2012/10/22 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
2013/11/11 Javascript
jQuery中hover方法和toggle方法使用指南
2015/02/27 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
jquery实现最简单的滑动菜单效果代码
2015/09/12 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
基于BootStrap实现局部刷新分页实例代码
2016/08/08 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
js实现手机发送验证码功能
2017/03/13 Javascript
JS实现颜色的10进制转化成rgba格式的方法
2017/09/04 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法
2017/10/20 jQuery
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
[40:05]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python中join和split用法实例
2015/04/14 Python
Python学习之Django的管理界面代码示例
2018/02/10 Python
Python标准库使用OrderedDict类的实例讲解
2019/02/14 Python
pytorch 多分类问题,计算百分比操作
2020/07/09 Python
如何利用python进行时间序列分析
2020/08/04 Python
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
国际奢侈品品牌童装购物网站:Designer Childrenswear
2019/05/08 全球购物
技术副厂长岗位职责
2013/12/26 职场文书
中西医专业毕业生职业规划书
2014/02/24 职场文书
村党支部书记承诺书
2014/05/29 职场文书
临时工聘用合同协议书
2014/10/29 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL