- src/components/CommonAside.vue
1.1 引入element-ui 侧边栏样式 适当修改
<el-menu class="el-menu-vertical-demo">
<el-sub-menu index="1">
<template #title>
<el-icon><location /></el-icon>
<span>导航栏1</span>
</template>
<el-menu-item-group title="Group One">
<el-menu-item index="1-1">item one</el-menu-item>
<el-menu-item index="1-2">item two</el-menu-item>
</el-menu-item-group>
</el-sub-menu>
</el-menu>
1.2 书写要渲染的代码
<script>
export default {
setup() {
const list = [
{
path: "/user",
name: "user",
label: "用户管理",
icon: "user",
url: "UserManage/UserManage",
},
{
label: "其他",
icon: "location",
path:"/other",
children: [
{
path: "/page1",
name: "page1",
label: "页面1",
icon: "setting",
url: "Other/PageOne",
},
{
path: "/page2",
name: "page2",
label: "页面2",
icon: "setting",
url: "Other/PageTwo",
},
],
},
];
const noChildren = ()=>{
return list.filter((item)=>!item.children);
};
const hasChildren = ()=>{
return list.filter((item)=>item.children);
};
return {
noChildren,
hasChildren,
}
},
};
</script>
1.3 template > v-for遍历
<template>
<el-aside width="200px">
<el-menu class="el-menu-vertical-demo">
<el-menu-item :index="item.path" v-for="item in noChildren()" :key="item.path">
<!-- 动态引入icon -->
<!-- <el-icon><icon-menu /></el-icon> -->
<component class="icons" :is="item.icon"></component>
<!-- <span>一级菜单</span> -->
<span>{{item.label}}</span>
</el-menu-item>
<el-sub-menu :index="item.label" v-for="item in hasChildren()" :key="item.path">
<template #title>
<component class="icons" :is="item.icon"></component>
<span>{{item.label}}</span>
</template>
<el-menu-item-group>
<el-menu-item :index="subItem.path" v-for="(subItem,subIndex) in item.children" :key="subIndex">
<component class="icons" :is="subItem.icon"></component>
<span>{{subItem.label}}</span>
</el-menu-item>
</el-menu-item-group>
</el-sub-menu>
</el-menu>
</el-aside>
</template>
动态效果展示