经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » Vue.js » 查看文章
vue3中的伸缩菜单组件
来源:jb51  时间:2023/1/16 9:16:22  对本文有异议

vue3伸缩菜单组件

最近一直在学习分装组件,学到了一个伸缩菜单栏组件,浅浅的记录一下,想要封装菜单的,代码可以直接拿去用,稍作修改即可!

效果图

1.在components下面创建一个container的文件,在container文件下面创建一个src文件,然后在src文件下创建index.vue文件

这个文件里写入 

  1. <template>
  2. <div class="common-layout">
  3. <el-container>
  4. <el-aside width="auto">
  5. <!-- 侧边菜单栏组件-->
  6. <nav-side v-model:collapse="isCollapse"></nav-side>
  7. </el-aside>
  8. <el-container>
  9. <el-header>
  10. <!-- 头部组件-->
  11. <nav-header v-model:collapse="isCollapse"></nav-header>
  12. </el-header>
  13. <el-main>
  14. <router-view></router-view>
  15. </el-main>
  16. </el-container>
  17. </el-container>
  18. </div>
  19. </template>
  20. <script lang="ts" setup>
  21. import {ref} from 'vue'
  22. import navHeader from './navHeader/index.vue'
  23. import navSide from './navSide/index.vue'
  24. const isCollapse=ref<boolean>(false)
  25. </script>
  26. <style lang="scss" scoped>
  27. .el-header {
  28. padding: 0;
  29. border-bottom: 1px solid #eeeeee;
  30. }
  31. </style>

2.在router文件下的index.ts写入 

  1. // @ts-ignore
  2. import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
  3. const routes: Array<RouteRecordRaw> = [
  4. {
  5. path:'/',
  6. component:()=>import('../components/container/src/index.vue'),
  7. children:[
  8. {
  9. path: '/',
  10. name: 'home',
  11. component:()=>import('../view/home.vue'),
  12. }
  13. ]
  14. },
  15. ]
  16. const router = createRouter({
  17. history: createWebHistory(),
  18. routes
  19. })
  20. export default router

3.在components下面创建一个container的文件,在container文件下面创建一个src文件,然后在src文件下创建navHeader文件,在navHeader文件下创建index.vue文件

在文件里写入

  1. <template>
  2. <div class="header">
  3. <div @click="shrink">
  4. <!-- 伸缩图标-->
  5. <Expand v-if="collapse==true"></Expand>
  6. <Fold v-else></Fold>
  7. </div>
  8. </div>
  9. </template>
  10. <script lang="ts" setup>
  11. import {ref} from 'vue'
  12. let props=defineProps<{
  13. collapse:Boolean
  14. }>()
  15. let emits=defineEmits(['update:collapse'])
  16. const shrink=()=>{
  17. emits('update:collapse',!props.collapse)
  18. }
  19. </script>
  20. <style lang="scss" scoped>
  21. .header {
  22. height: 60px;
  23. padding: 0 20px;
  24. display: flex;
  25. align-items: center;
  26. }
  27. </style>

4.在components下面创建一个container的文件,在container文件下面创建一个src文件,然后在src文件下创建navSide文件,在navSide文件下创建index.vue文件 

在文件里写入

  1. <template>
  2. <el-menu
  3. default-active="1"
  4. class="el-menu-vertical-demo"
  5. :collapse="collapse"
  6. >
  7. <el-menu-item index="1">
  8. <el-icon><House></House></el-icon>
  9. <template #title>导航一</template>
  10. </el-menu-item>
  11. <el-menu-item index="2">
  12. <el-icon><Message></Message></el-icon>
  13. <template #title>导航二</template>
  14. </el-menu-item>
  15. <el-menu-item index="3">
  16. <el-icon><Grid></Grid></el-icon>
  17. <template #title>导航三</template>
  18. </el-menu-item>
  19. <el-menu-item index="4">
  20. <el-icon><Tools></Tools></el-icon>
  21. <template #title>导航四</template>
  22. </el-menu-item>
  23. </el-menu>
  24. </template>
  25. <script lang="ts" setup>
  26. import {ref} from 'vue'
  27. let props=defineProps<{
  28. collapse:Boolean
  29. }>()
  30. </script>
  31. <style lang="scss" scoped>
  32. .el-menu-vertical-demo:not(.el-menu--collapse) {
  33. width: 200px;
  34. min-height: 400px;
  35. }
  36. </style>

这就是封装伸缩菜单栏组件的代码。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号