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中window.confirm的行为
Oct 21 Javascript
javascript学习笔记(六)数据类型和JSON格式
Oct 08 Javascript
js实现简单的左右两边固定广告效果实例
Apr 10 Javascript
javascript中apply、call和bind的使用区别
Apr 05 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
Aug 31 Javascript
bootstrap 路径导航 分页 进度条的实例代码
Aug 06 Javascript
Vue 实现列表动态添加和删除的两种方法小结
Sep 07 Javascript
JS+php后台实现文件上传功能详解
Mar 02 Javascript
使用Vue实现调用接口加载页面初始数据
Oct 28 Javascript
jQuery实现手风琴效果(蒙版)
Jan 11 jQuery
vue调用微信JSDK 扫一扫,相册等需要注意的事项
Jan 03 Vue.js
vue编写简单的购物车功能
Jan 08 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
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
PDO预处理语句PDOStatement对象使用总结
2014/11/20 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
只需五句话搞定JavaScript作用域(经典)
2016/07/26 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
nodejs根据ip数组在百度地图中进行定位
2017/03/06 NodeJs
js实现城市级联菜单的2种方法
2017/06/23 Javascript
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
详解react-router4 异步加载路由两种方法
2017/09/12 Javascript
Javascript 严格模式use strict详解
2017/09/16 Javascript
微信小程序实现自动定位功能
2018/10/31 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
webpack是如何实现模块化加载的方法
2019/11/06 Javascript
[01:09:01]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第一场 10.28
2020/10/28 DOTA
[10:21]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster 选手采访
2021/03/11 DOTA
Python操作列表之List.insert()方法的使用
2015/05/20 Python
python实现的文件同步服务器实例
2015/06/02 Python
Python函数式编程指南(三):迭代器详解
2015/06/24 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
Python接口测试文件上传实例解析
2020/05/22 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
意大利独特而优质的家居用品:Fazzini
2018/12/05 全球购物
预备党员承诺书
2014/03/25 职场文书
热爱祖国的演讲稿
2014/05/04 职场文书
电子信息工程专业自荐书
2014/06/24 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
MySQL数据库如何查看表占用空间大小
2022/06/10 MySQL
使用Apache Camel表达REST服务的方法
2022/06/10 Servers