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 相关文章推荐
jQuery 处理网页内容的实现代码
Feb 15 Javascript
javascript中强制执行toString()具体实现
Apr 27 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
Jun 24 Javascript
javascript实现简单的Map示例介绍
Dec 23 Javascript
javascript实现json页面分页实例代码
Feb 20 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
Jul 27 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
May 14 Javascript
基于AngularJS实现表单验证功能
Jul 28 Javascript
移动web开发之touch事件实例详解
Jan 17 Javascript
解决vue同一slot在组件中渲染多次的问题
Sep 06 Javascript
jquery实现的分页显示功能示例
Aug 23 jQuery
Webpack按需加载打包chunk命名的方法
Sep 22 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
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
ubuntu 编译安装php 5.3.3+memcache的方法
2010/08/05 PHP
PHP实现动态柱状图改进版
2015/03/30 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
PHP实现八皇后算法
2019/05/06 PHP
JavaScript判断密码强度(自写代码)
2013/09/06 Javascript
jquery.ui.draggable中文文档(原文翻译)
2013/11/15 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
JS定义网页表单提交(submit)的方法
2015/03/20 Javascript
14款经典网页图片和文字特效的jQuery插件-前端开发必备
2015/08/25 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
jQuery使用deferreds串行多个ajax请求
2016/08/22 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
vue webpack实用技巧总结
2018/04/24 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
对python模块中多个类的用法详解
2019/01/10 Python
Python不同目录间进行模块调用的实现方法
2019/01/29 Python
Python代码太长换行的实现
2019/07/05 Python
python3.5 cv2 获取视频特定帧生成jpg图片
2019/08/28 Python
基于python3监控服务器状态进行邮件报警
2019/10/19 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
pytorch中torch.max和Tensor.view函数用法详解
2020/01/03 Python
python 发送邮件的四种方法汇总
2020/12/02 Python
python实现视频压缩功能
2020/12/18 Python
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
台湾网友喜爱的综合型网路购物商城:Yahoo! 奇摩购物中心
2018/03/10 全球购物
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
电信专业应届生自荐信
2013/09/28 职场文书
实习自我鉴定模板
2013/09/28 职场文书
2015新年寄语(一句话)
2014/12/08 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
vue3中的组件间通信
2021/03/31 Vue.js
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技