element菜单实战

文件sidebar.vue

<template>
	<el-menu
		unique-opened
		background-color="#182132"
		text-color="#9ca9bb"
		active-text-color="#fff"
		:default-active="defaultActive"
		@select="handleMenuSelect"
	>
		<template v-for="menu in menus">
			<el-menu-item
				v-if="!menu.children"
				:key="menu.link"
				:index="menu.link"
			>
				<i :class="[menu.icon,'icon']"
				<span slot="title">{{ menu.title }}</span>
			</el-menu-item>
			<el-submenu
				v-if="menu.children"
				:key="menu.title"
				:index="menu.title"
			>
				<template #title>
					<i :class="[menu.icon,'icon']"/>
					<span>{{ menu.title }}</span>
				</template>
				<el-menu-item
					v-for="item in menu.children"
					:key="item.link"
					:index="item.link"
				>
					{{ item.title }}
				</el-menu-item>
			</el-submene>
		</template>
	</el-menu>
</template>
export default{
	computed:{
		defaultActive(){
			return this.activeRouterName()
		}
	},
	watch:{
		$route(to){
			this.checkMenuActive(to)
		}
	},
	methods:{
		handleMenuSelect(name){
			this.$router.push({name})
		},
		activeRouterName(){
			return this.checkMenuActive(this.$route)
		},
		checkMenuActive(router){
			let activeName=router.name
			this.menus.forEach((menu)=>{
				let active=false
				active=this.menuActive(router,menu)
				if(active){
					activeName=menu.link
				}
				if(menu.children){
					menu.children.forEach(submenu=>{
						active=this.menuActive(router,submenu)
						if(active){
							activeName=submenu.link
						}
					})
				}
			})
			return activeName
		},
		menuActive(router,menu){
			let active=false
			if(Array.isArray(menu.path)){
				menu.path.some(item=>{
					menu.isActive=router.path.indexOf(item)>-1
					active=menu.isActive
					return menu.isActive
				})
			}
			return active
		}
	}
}

menu数据结构

menus:[
	{
		icon:'', // 父菜单icon
		link:'',	// 父菜单路由名称
		title:'',	// 父菜单标题
		children:[
			{
				icon:'', // 子菜单icon
				link:'',  // 子菜单路由名称
				title:'',	// 子菜单标题
				path:[],	// 子菜单激活路径
				isActive:false	// 是否默认激活
			},
			{
				icon:'',
				link:'',
				title:'',
				path:[],
				isActive:false
			}
		]
	}
]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值