vue動(dòng)態(tài)路由實(shí)現(xiàn)多級(jí)嵌套面包屑的思路與方法
前言
最近在工作中遇到了一個(gè)問題,是關(guān)于vue動(dòng)態(tài)路由多級(jí)嵌套面包屑怎么弄(不是動(dòng)態(tài)路由嵌套可以嘗試用 this.$route.matched
方法獲取到path和name集合,動(dòng)態(tài)的嵌套獲取不到全部具體的id)
功能比如:A列表頁(yè)面路由如/a,點(diǎn)擊任意一列進(jìn)入任意一個(gè)A的詳情頁(yè)面名字為B,/b/03(這個(gè)是動(dòng)態(tài)路由弄是吧,03就是id嘛),點(diǎn)擊B頁(yè)面任意一列,再進(jìn)入B的詳情頁(yè)名字為C,路由如/bdetail/01;現(xiàn)在弄面包屑要獲取到的路由是剛剛打開的,如(/a;/b/03;/bdetail/01)
思路:獲取所有進(jìn)入的層級(jí)的路由和名稱如breadlist=[{path:'/a',name:'一級(jí)'},{path:'/b/03',name:'二級(jí)'},{path:'/bdetail/01',name:'三級(jí)'}]
,然后遍歷出來如: <span v-for="(item in breadlist)"><router-link :to="item.path">{{item.name}}</router-link></span>
做法
下面貼出相關(guān)代碼:
A列表頁(yè)面跳轉(zhuǎn)按鈕:(breadNum記錄面包屑層級(jí))
<router-link :to="{path:'/b/'+id,query:{breadNum:2}}"></router-link>
B列表頁(yè)面跳轉(zhuǎn)按鈕:
<router-link :to="{path:'/bbdetail/'+id,query:{breadNum:3}}"></router-link>
breadcrumb.vue頁(yè)面:
<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記錄層級(jí),默認(rèn)為1,如果大于1,要添加上變量; var breadLength=this.$store.state.breadListState.length;//目前breadlist集合數(shù)組個(gè)數(shù) var curName=this.$route.name; var curPath=this.$route.fullPath; var newBread={name:curName,path:curPath}; var ishome=curName=='首頁(yè)'; console.log(ishome); if(breadNumber===1){//點(diǎn)擊一級(jí)菜單 this.$store.commit('breadListStateRemove',1);//初始化,只有首頁(yè)面包屑按鈕 if(!ishome)//如果不是首頁(yè) this.$store.commit('breadListStateAdd',newBread);//當(dāng)前頁(yè)面添加到breadlist集合 } else if(breadLength<=breadNumber){//如果不是一級(jí)導(dǎo)航,并且breadlist集合個(gè)數(shù)等于或者小于目前層級(jí) this.$store.commit('breadListStateAdd',newBread);//要把當(dāng)前路由添加到breadlist集合 }else{ this.$store.commit('breadListStateRemove',parseInt(breadNumber)+1);//如果往回點(diǎn)面包屑導(dǎo)航,截取; } this.breadlist=this.$store.state.breadListState; console.log(this.breadlist); } }, watch: { $route () { this.getBreadcrumb(); } }, } </script>
狀態(tài)管理store.js代碼:
export default store = new Vuex.Store({ state: { breadListState:[ {name:'首頁(yè)',path:'/'} ] }, mutations: { breadListStateAdd(state,obj){ state.breadListState.push(obj); }, breadListStateRemove(state,num){ state.breadListState=state.breadListState.slice(0,num); } } })
路由route.js代碼:
{ path: '/', name: '首頁(yè)', component: Main, redirect:'/home', children:[ {path: '/a',name: 'A頁(yè)面',component: APage}, {path: '/b/:id',name: 'B頁(yè)面',component: BPage}, {path: '/bdetail/:id',name: 'C頁(yè)面',component: CPage}, ] }
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
vue項(xiàng)目如何引入json數(shù)據(jù)
這篇文章主要介紹了vue項(xiàng)目如何引入json數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10在vue3中使用el-tree-select實(shí)現(xiàn)樹形下拉選擇器效果
el-tree-select是一個(gè)含有下拉菜單的樹形選擇器,結(jié)合了?el-tree?和?el-select?兩個(gè)組件的功能,這篇文章主要介紹了在vue3中使用el-tree-select做一個(gè)樹形下拉選擇器,需要的朋友可以參考下2024-03-03vue前端實(shí)現(xiàn)驗(yàn)證碼登錄功能
這篇文章主要介紹了vue前端實(shí)現(xiàn)驗(yàn)證碼登錄功能,登錄時(shí)圖形驗(yàn)證通過三種方法結(jié)合實(shí)例代碼給大家講解的非常詳細(xì), 通過實(shí)例代碼介紹了vue登錄時(shí)圖形驗(yàn)證碼功能的實(shí)現(xiàn),感興趣的朋友一起看看吧2023-12-12electron中使用本地?cái)?shù)據(jù)庫(kù)的方法詳解
眾所周知,electron是可以開發(fā)桌面端的框架,那我們有一些數(shù)據(jù)不想讓別人看到,只能在自己的電腦上展示時(shí)怎么辦呢,這個(gè)時(shí)候就可以用到本地?cái)?shù)據(jù)庫(kù),本文將以sqlite3為例介紹一下electron如何使用本地?cái)?shù)據(jù)庫(kù)2023-10-10Vue基于iview table展示圖片實(shí)現(xiàn)點(diǎn)擊放大
這篇文章主要介紹了Vue基于iview table展示圖片實(shí)現(xiàn)點(diǎn)擊放大,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08vue axios post發(fā)送復(fù)雜對(duì)象問題
現(xiàn)在vue項(xiàng)目中,一般使用axios發(fā)送請(qǐng)求去后臺(tái)拉取數(shù)據(jù)。這篇文章主要介紹了vue axios post發(fā)送復(fù)雜對(duì)象的一點(diǎn)思考,需要的朋友可以參考下2019-06-06關(guān)于應(yīng)用UI組件的移動(dòng)端適配方式
這篇文章主要介紹了關(guān)于應(yīng)用UI組件的移動(dòng)端適配方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09