You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
< template >
<!-- 如果菜单有子菜单且数量大于等于1 , 则显示为子菜单 -- >
< el -submenu v-if ="menu.list && menu.list.length >= 1" :index="menu.menuId + ''">
<!-- 子菜单标题 -->
<template slot="title">
<span>{{ menu.name }}</span> <!-- 显示菜单名称 -->
</template>
<!-- 递归渲染子菜单 -->
<sub-menu
v-for="item in menu.list" <!-- 遍历子菜单列表 -->
:key="item.menuId" <!-- 设置唯一标识符 -->
:menu="item" <!-- 传递当前子菜单数据 -->
:dynamicMenuRoutes="dynamicMenuRoutes" <!-- 传递动态路由数据 -->
></sub-menu>
</el-submenu>
<!-- 如果没有子菜单,则显示为普通菜单项 -->
<el-menu-item v-else :index="menu.menuId + ''" @click="gotoRouteHandle(menu)" >
< span > { { menu . name } } < / span > <!-- 显示菜单名称 -- >
< / e l - m e n u - i t e m >
< / template >
< script >
import SubMenu from "./IndexAsideSub" ; // 导入子菜单组件
export default {
name : "sub-menu" , // 定义组件名称
props : {
menu : { // 定义菜单数据的属性
type : Object , // 数据类型为对象
required : true // 必须传入
} ,
dynamicMenuRoutes : { // 定义动态路由数据的属性
type : Array , // 数据类型为数组
required : true // 必须传入
}
} ,
components : {
SubMenu // 注册子菜单组件
} ,
methods : {
// 跳转到指定路由的方法
gotoRouteHandle ( menu ) {
var route = this . dynamicMenuRoutes . filter ( // 过滤动态路由, 匹配当前菜单的menuId
item => item . meta . menuId === menu . menuId
) ;
if ( route . length >= 1 ) { // 如果找到匹配的路由
if ( route [ 0 ] . component != null ) { // 如果路由有对应的组件
this . $router . replace ( { name : route [ 0 ] . name } ) ; // 替换路由到指定名称的页面
} else { // 如果路由没有对应的组件
this . $router . push ( { name : "404" } ) ; // 跳转到404页面
}
}
}
}
} ;
< / script >