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 相关文章推荐
js 新浪的一个图片播放图片轮换效果代码
Jul 15 Javascript
jQuery :first选择器使用介绍
Aug 09 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
Jun 22 Javascript
new Date()问题在ie8下面的处理方法
Jul 31 Javascript
JavaScript中setUTCFullYear()方法的使用简介
Jun 12 Javascript
比较常见的javascript中定义函数的区别
Nov 09 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
Jan 06 Javascript
JavaScript仿网易选项卡制作代码
Oct 06 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
Nov 14 Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
May 23 jQuery
微信小程序实现页面跳转传递参数(实体,对象)
Aug 12 Javascript
element中的$confirm的使用
Apr 26 Javascript
基于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 连接mssql数据库 初学php笔记
2010/03/01 PHP
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
静态页面的值传递(三部曲)
2006/09/25 Javascript
可实现多表单提交的javascript函数
2007/08/01 Javascript
判断对象是否Window的实现代码
2012/01/10 Javascript
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
JavaScript面向对象的实现方法小结
2015/04/14 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
2015/11/02 Javascript
基于javascript实现全屏漂浮广告
2016/03/31 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
2019/05/06 Javascript
微信小程序实现pdf、word等格式文件上传的方法
2019/09/10 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
Python中扩展包的安装方法详解
2017/06/14 Python
Python实现的堆排序算法示例
2018/04/29 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
如何使用repr调试python程序
2020/02/28 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
详解Html5微信支付爬坑之路
2018/07/24 HTML / CSS
HTML5新增属性data-*和js/jquery之间的交互及注意事项
2017/08/08 HTML / CSS
H5页面适配iPhoneX(就是那么简单)
2019/12/02 HTML / CSS
eBay瑞士购物网站:eBay.ch
2018/12/24 全球购物
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
迎新晚会主持词
2014/03/24 职场文书
化工见习报告范文
2014/10/31 职场文书
倡议书作文
2015/01/19 职场文书