vue前端根据后台返回的数据实现动态面包屑(使用递归)

Posted 龖龖龖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue前端根据后台返回的数据实现动态面包屑(使用递归)相关的知识,希望对你有一定的参考价值。

vue前端根据后台返回的数据实现动态面包屑(使用递归)

<el-breadcrumb separator-class="el-icon-arrow-right">
  //<el-breadcrumb-item :to=" path: '/' ">首页</el-breadcrumb-item>
  <transition-group name="breadcrumb">
	  <el-breadcrumb-item 
	  	v-for="(item,index) in levelList" 
	  	:key="item.path"
	  	>
			<span 
			v-if="item.redirect === 'noRedirect' || index == levelList.length - 1"
			class="no-redirect"
			>
			item.meta.title
			</span>
			<a v-else @click.prevent="handleLink(item)">item.meta.title</a>
		</el-breadcrumb-item>
	</transition-group>
</el-breadcrumb>

<script>
export default 
	data() 
		return 
			levelList:[path:"/index",meta:title:"首页"]
		
	,
	watch:
		$route(route) 
			if(route.path.startsWith) 
				return;
			
			this.getBreadcrumb();
		
	
	created()
		this.getBreadcrumb();
	,
	methods:
		getComponentList(menus,list) 
			for(let i = 0; i < menus.length; i++) 
				list.push(menus[i]);
				if(menus[i].path == this.$route.path)
					if(list) return list;
				
				if(menus[i].children.length > 0)
					let flag =  this.getComponentList(menus[i].children,list);
					if(flag) return flag;
				
				list.pop();
			
			return [];
		,
		getBreadcrumb()
			var list = [];
			let matched = [];
			//bannerList 为后台返回的导航集合数据(存储方式不仅限于sessionStorage)
			let bannerList = JSON.parse(sessionStorage.getItem("BannerList"));
			list = this.getComponentList(bannerList,list);
			let first = matched.concat(list);
			if(!this.isDashboard(first)) 
				matched = [path:"/index",meta:title:"首页"].concat(first)
			
			this.levelList = matched.filter((item)=>
				if(item)
					return item
				
			)
		,
		isDashboard(route) 
			const name = route && (route.name || route.menuName);
			if(!name) 
				return false;
			
			return name.trim() === "首页";
		,
		handleLink(item) 
			const redirect,path = item;
			if(redirect)
				this.$router.push(redirect);
				return;
			
			this.$router.push(path);
		
	

</script>
<style lang="scss" scoped>
	.app-breadcrumb .el-breadcrumb
		display:inline-block;
		font-size:14px;
		line-height:50px;
		margin-left:8px;
		.no-redirect 
			color:#97a8be;
			cursor:text;
		
	
</style>

以上是关于vue前端根据后台返回的数据实现动态面包屑(使用递归)的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 前端篇:使用 vue-router 进行动态加载菜单

若依 vue前端 动态设置路由path不同参数 在页面容器里打开新页面(新路由),面包屑和标签页标题根据参数动态改变,面包屑多级标题,侧边栏对应菜单亮起

前端Vue+Element UI案例:通用后台管理系统-面包屑tag栏

Vue权限控制——动态注册路由

Vue权限控制——动态注册路由

vue项目 动态路由怎么做