element-plus + vue3递归实现侧边栏菜单

需求:侧边栏能按照数据结构显示多层级的数据结构

第一步:在components文件夹中新建Sidebar.vue文件,代码如下
<template>
  <div>
    <el-menu :unique-opened="true" router>
      <!-- 递归组件 -->
      <NavMenu :menus="menus"></NavMenu>
    </el-menu>
  </div>
</template>
 
<script setup>
import menus from '@/router/menulist.js'
import { useRouter } from 'vue-router'
import NavMenu from './NavMenu.vue'
const router = useRouter()
</script>
 
<style scoped>
/* 侧边栏去掉竖线 */
.el-menu {
  border-right: 0;
}
</style>
第二步:在components文件夹中新建NavMenu.vue文件,代码如下
<template>
	<!-- 有子级-->
	<template v-for="item in menus">
		<template v-if="!item.meta.noShow">
			<el-sub-menu :index="item.meta.title" v-if="item.children && item.children.length > 0" :key="item.path">
				<template #title>
					<span>{{ item.meta.title }}</span>
				</template>
				<NavMenu :menus="item.children"> </NavMenu>
			</el-sub-menu>
			<!-- 没有子级-->
			<el-menu-item :index="item.path" :key="item.path" v-else>
				<template #title>
					<span>{{ item.meta.title }}</span>
				</template>
			</el-menu-item>
		</template>
	</template>
</template>
<script setup>
	import NavMenu from './NavMenu.vue'
	const props = defineProps(['menus'])
</script>
<style scoped></style>

第三步:在router文件夹下新建menulist.js文件,代码如下(此处只做演示,可根据自己需求调整)
const menu = [
	// meta: {  noShow: true ,隐藏}
	{
		path: '/organizational',
		name: 'organizational',
		// component: () => import('@/views/organizational/index.vue'),
		meta: { title: '组织架构' },
		children: [
			// 组织管理  人员管理  角色管理
			{
				path: '/organizational/organization',
				name: 'organizational-organization',
				component: () => import('@/views/organizational/organization.vue'),
				meta: { title: '部门管理' }
			},
			{
				path: '/organizational/personnel',
				name: 'organizational-personnel',
				component: () => import('@/views/organizational/personnel.vue'),
				meta: { title: '人员管理' }
			},
			{
				path: '/organizational/role',
				name: 'organizational-role',
				component: () => import('@/views/organizational/role.vue'),
				meta: { title: '角色管理' }
			}
		]
	},
	{
		// 应用管理
		path: '/application',
		name: 'application',
		component: () => import('@/views/application/index.vue'),
		meta: { title: '应用管理' }
	},
	{
		// 板块
		path: '/plate',
		name: 'plate',
		component: () => import('@/views/plate/index.vue'),
		meta: { title: '板块管理' }
	},
	{
		// 通知通告
		path: '/notice',
		name: 'notice',
		component: () => import('@/views/notice/index.vue'),
		meta: { title: '通知通告' }
	},
	{
		// 待办中心
		path: '/todo',
		name: 'todo',
		component: () => import('@/views/todo/index.vue'),
		meta: { title: '待办中心' }
	},
	{
		// 能力中心
		path: '/ability',
		name: 'ability',
		component: () => import('@/views/ability/index.vue'),
		meta: { title: '能力中心' }
	},
	{
		// 能力中心
		path: '/auditing',
		name: 'auditing',
		component: () => import('@/views/auditing/index.vue'),
		meta: { title: '访问申请' }
	}
]

export default menu

到此,一个递归的侧边栏菜单就完成啦~

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,让我们开始吧! 首先,我们需要在项目中安装 `element-plus`,你可以使用 npm 或 yarn 进行安装,比如: ``` npm install element-plus --save ``` 或者 ``` yarn add element-plus ``` 安装完成后,我们需要在 `main.ts` 中引入并使用 `element-plus`,代码如下: ```typescript import { createApp } from 'vue' import ElementPlus from 'element-plus' import 'element-plus/lib/theme-chalk/index.css' import App from './App.vue' const app = createApp(App) app.use(ElementPlus) app.mount('#app') ``` 现在我们已经成功引入了 `element-plus`,接下来我们可以开始编写一些组件。 例如,在 `src/components` 目录下创建一个名为 `HelloWorld.vue` 的组件,代码如下: ```vue <template> <div class="hello"> <el-button type="primary" @click="handleClick">Click me!</el-button> </div> </template> <script lang="ts"> import { defineComponent } from 'vue' import { ElButton } from 'element-plus' export default defineComponent({ name: 'HelloWorld', components: { ElButton }, methods: { handleClick() { console.log('Hello, world!') } } }) </script> ``` 在这个组件中,我们使用了 `ElButton` 组件,并在它的点击事件中打印了一条消息。 接下来,我们可以在 `App.vue` 中使用这个组件,代码如下: ```vue <template> <div id="app"> <HelloWorld /> </div> </template> <script lang="ts"> import { defineComponent } from 'vue' import HelloWorld from './components/HelloWorld.vue' export default defineComponent({ name: 'App', components: { HelloWorld } }) </script> ``` 现在,我们已经成功使用 `element-plus` 来创建了一个简单的组件,并在 `App.vue` 中使用它。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值