当前位置: 首页 > news >正文

构建Vue项目的侧边栏组件:Aside

构建Vue项目的侧边栏组件:Aside

在Vue项目中,侧边栏(Aside)是一个常见的组件,用于展示导航菜单。本文将详细介绍如何创建一个侧边栏组件,包括如何引入el-menu组件、定义路由、传递props以及编写MenuTree子组件等步骤。

1. 引入el-menu组件

首先,在Aside.vue中引入el-menu组件,用于构建侧边栏的菜单结构。

2. 侧边栏Logo

el-menu组件内部,添加一个用于显示侧边栏Logo的<p>标签。

3. 抽离MenuTree组件

为了更灵活地管理菜单数据,我们抽离出一个MenuTree组件,专门用于渲染菜单项和子菜单。

4. 定义路由

router/index.js文件中定义路由,并在对应的视图(view)页面中编写相应的内容。

5. Props传递

Aside.vue组件中,通过props向MenuTree组件传递菜单数据(menuData)和侧边栏收缩状态(isCollapse)。

使用useRouter获取路由信息

利用useRouter钩子获取路由信息,并从router.options.routes[0].children中提取出菜单数据,然后传递给MenuTree组件。

6. MenuTree.vue编写

MenuTree.vue组件中,我们使用v-for指令遍历菜单数据,根据菜单项是否有子项来生成不同的菜单结构。

  • 无子菜单:使用el-menu-item组件,并显示图标和文字。
  • 有子菜单:使用el-sub-menu组件,并递归调用MenuTree组件来生成子菜单。

7. 使用RouterView展示路由后的页面

App.vueLayout.vue中使用RouterView组件来展示路由对应的页面内容。

8. 侧边栏的缩放功能

侧边栏的缩放功能还未完全实现,但已在Header部分预留了按钮用于控制侧边栏的收缩状态。

完整代码示例

Aside.vue

<template><el-menu :default-active="$route.path" router :collapse="isCollapse"><p class="logo">{{ isCollapse ? 'W' : 'W陪诊' }}</p><menu-tree :menuData="menuData" :isCollapse="isCollapse" /></el-menu>
</template><script setup>
import MenuTree from './components/MenuTree.vue'
import { useRouter } from 'vue-router'
import { ref, computed } from 'vue'
import { useMenuStore } from '@/stores'const router = useRouter()
const menuData = router.options.routes[0].children
const menuStore = useMenuStore()
const isCollapse = computed(() => menuStore.menuIsCollapse)
</script><style scoped>
/* 样式代码 */
</style>

MenuTree.vue

<template><div><template v-for="(item, index) in props.menuData"><el-menu-item v-if="!item.children" :index="item.meta.path"><el-icon><component :is="item.meta.icon"></component></el-icon><span>{{ isCollapse ? '' : item.meta.name }}</span></el-menu-item><el-sub-menu v-else :index="item.path"><template #title><el-icon><component :is="item.meta.icon"></component></el-icon><span>{{ isCollapse ? '' : item.meta.name }}</span></template><menu-tree :menuData="item.children" :isCollapse="isCollapse" /></el-sub-menu></template></div>
</template><script setup>
import { useRouter } from 'vue-router'
import { useMenuStore } from '@/stores'const props = defineProps(['menuData', 'isCollapse'])
const router = useRouter()
const MenuStore = useMenuStore()const handleClickMenu = (item) => {MenuStore.setTagList(item.meta)
}
</script>

通过上述步骤,我们可以成功地创建一个功能完备的侧边栏组件,为Vue项目提供清晰的导航结构。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Windows系统工具】dll综合解决工具,解锁专业版功能!
  • docker的网络模式
  • K8S中部署MySQL高可用工具Orchestrator
  • 微服务网关全能进化:设计模式加持下的Spring Cloud Alibaba落地实践(三)
  • 【强化学习环境搭建】mujoco,mujoco_py,d4rl等强化学习相关资源安装及使用的参考资料链接 持续更新ing
  • C#Winform常见的多线程实现方法:
  • nacos Spring cloud 报错 URI is not absolute、service not found、502 bad gateway
  • C++中string的简单实现
  • R语言xlsx,txt文件处理:以《书摘》00年-10年资源合集整理为例
  • 微信小程序npm扩展能力探究
  • CCS10导入CCS3.3工程
  • 287. 寻找重复数(stl法)
  • 【机器学习】和【人工智能】在量子力学的应用及代码案例分析
  • Spring Cloud 八股文
  • 【笔记】物理化学绪论
  • Android组件 - 收藏集 - 掘金
  • CSS 专业技巧
  • ES6 学习笔记(一)let,const和解构赋值
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JavaScript中的对象个人分享
  • JS字符串转数字方法总结
  • MySQL数据库运维之数据恢复
  • Python学习之路13-记分
  • Python学习之路16-使用API
  • Yii源码解读-服务定位器(Service Locator)
  • 百度地图API标注+时间轴组件
  • 读懂package.json -- 依赖管理
  • 回流、重绘及其优化
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端性能优化——回流与重绘
  • 巧用 TypeScript (一)
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 我是如何设计 Upload 上传组件的
  • 新书推荐|Windows黑客编程技术详解
  • postgresql行列转换函数
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #NOIP 2014# day.1 T2 联合权值
  • #stm32整理(一)flash读写
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (C语言)fgets与fputs函数详解
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (回溯) LeetCode 131. 分割回文串
  • (算法)Game
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)iOS字体
  • (转)大道至简,职场上做人做事做管理
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离