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列表頁面路由如/a,點(diǎn)擊任意一列進(jìn)入任意一個(gè)A的詳情頁面名字為B,/b/03(這個(gè)是動(dòng)態(tài)路由弄是吧,03就是id嘛),點(diǎn)擊B頁面任意一列,再進(jìn)入B的詳情頁名字為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列表頁面跳轉(zhuǎn)按鈕:(breadNum記錄面包屑層級(jí))
<router-link :to="{path:'/b/'+id,query:{breadNum:2}}"></router-link>
B列表頁面跳轉(zhuǎn)按鈕:
<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記錄層級(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=='首頁';
console.log(ishome);
if(breadNumber===1){//點(diǎn)擊一級(jí)菜單
this.$store.commit('breadListStateRemove',1);//初始化,只有首頁面包屑按鈕
if(!ishome)//如果不是首頁
this.$store.commit('breadListStateAdd',newBread);//當(dāng)前頁面添加到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:'首頁',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},
]
}
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
詳解如何優(yōu)雅運(yùn)用Vue中的KeepAlive組件
在Vue中,KeepAlive組件是一種特殊的組件,用于緩存已經(jīng)渲染過的組件實(shí)例,本文主要為大家詳細(xì)介紹了KeepAlive組件的用法,需要的小伙伴可以參考下2023-09-09
用electron 打包發(fā)布集成vue2.0項(xiàng)目的操作過程
這篇文章主要介紹了用electron 打包發(fā)布集成vue2.0項(xiàng)目的操作步驟,把electron 加入到自己項(xiàng)目中各種不兼容,升級(jí)版本踩坑無數(shù)個(gè),今天通過本文給大家分享下詳細(xì)過程,需要的朋友可以參考下2022-10-10
Vue中請(qǐng)求本地JSON文件并返回?cái)?shù)據(jù)的方法實(shí)例
在前端開發(fā)過程當(dāng)中,當(dāng)后臺(tái)服務(wù)器開發(fā)數(shù)據(jù)還沒完善,沒法與咱們交接時(shí),咱們習(xí)慣在本地寫上一個(gè)json文件做模擬數(shù)據(jù)測試代碼效果是否有問題,下面這篇文章主要給大家介紹了關(guān)于Vue中請(qǐng)求本地JSON文件并返回?cái)?shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2022-08-08
初學(xué)vue出現(xiàn)空格警告的原因及其解決方案
今天小編就為大家分享一篇初學(xué)vue出現(xiàn)空格警告的原因及其解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10

