赞
踩
vue版本 | node版本 | Element Plus版本 |
^3.2.25 | v16.14.2 | ^2.1.8 |
使用了unplugin-vue-components
和 unplugin-auto-import
自动导入插件的可以将组件放在src/components文件夹内则不需引入即可使用,你只需关注components.d.ts文件内是否已引入该组件。
此处文件在src/layout文件夹下面需手动引入,setup语法糖引入即可使用不需要注册组件。
SubMenu.vue 父组件
- <template>
- <template v-for="item in menu">
- <!-- 一级菜单跳转 - 具有能跳转路由的功能 -->
- <el-menu-item v-if="item.pageHtml" :index="item.pageHtml">
- {{ item.name }}
- </el-menu-item>
- <!-- 分级菜单 - 此一级菜单不应具有跳转功能 -->
- <el-sub-menu v-else :index="item.id">
- <template #title>
- <span>{{ item.name }}</span>
- </template>
- <!-- 下级菜单 -->
- <MenuItem :list="item.list"></MenuItem>
- </el-sub-menu>
- </template>
- </template>
-
- <script lang="ts" setup>
- import MenuItem from './MenuItem.vue'
- import { MenuList } from './type'
- import { ref } from 'vue'
-
- // 此处使用的是session保存的页面数据,数据由后台接口获取
- const _menu = JSON.parse(sessionStorage.getItem('MENU') || '[]')
- const menu: MenuList[] = ref(_menu)
- </script>

MenuItem.vue 子组件
- <template>
- <template v-for="item in props.list">
- <el-menu-item :index="item.pageHtml">
- {{ item.name }}
- </el-menu-item>
-
- <!-- 子菜单内具有下级菜单,使用el-sub-menu渲染分级 -->
- <el-sub-menu v-if="item.list && item.list.length" :index="item.id">
- <template #title>
- <span>{{ item.name }}</span>
- </template>
-
- <!-- 递归组件 - 此组件为当前组件 -->
- <MenuItem :list="item.list"></MenuItem>
- </el-sub-menu>
- </template>
- </template>
-
- <script lang="ts" setup>
- import * as Type from './type'
-
- // 定义props接收的字段
- interface Props {
- list: Type.MenuList[]
- }
-
- // 获取父组件传进来的子菜单列表
- const props = defineProps<Props>()
- </script>

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。