vue3中的伸缩菜单组件

 更新时间:2023年01月14日 14:16:22   作者:阿wei程序媛  
这篇文章主要介绍了vue3中的伸缩菜单组件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

vue3伸缩菜单组件

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

效果图

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

这个文件里写入 

<template>
    <div class="common-layout">
      <el-container>
        <el-aside width="auto">
<!--        侧边菜单栏组件-->
        <nav-side v-model:collapse="isCollapse"></nav-side>
        </el-aside>
        <el-container>
          <el-header>
<!--          头部组件-->
            <nav-header v-model:collapse="isCollapse"></nav-header>
          </el-header>
          <el-main>
            <router-view></router-view>
          </el-main>
        </el-container>
      </el-container>
    </div>
</template>
<script lang="ts" setup>
import {ref} from 'vue'
import navHeader from './navHeader/index.vue'
import navSide from './navSide/index.vue'
const isCollapse=ref<boolean>(false)
 
</script>
 
<style lang="scss" scoped>
 
.el-header {
 padding: 0;
  border-bottom: 1px solid #eeeeee;
}
</style>

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

// @ts-ignore
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
const routes: Array<RouteRecordRaw> = [
    {
        path:'/',
        component:()=>import('../components/container/src/index.vue'),
        children:[
            {
                path: '/',
                name: 'home',
                component:()=>import('../view/home.vue'),
            }
        ]
    },
 
]
 
const router = createRouter({
    history: createWebHistory(),
    routes
})
 
export default router

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

在文件里写入

<template>
  <div class="header">
    <div @click="shrink">
<!--        伸缩图标-->
      <Expand v-if="collapse==true"></Expand>
      <Fold v-else></Fold>
    </div>
  </div>
</template>
 
<script lang="ts" setup>
import {ref} from 'vue'
let props=defineProps<{
  collapse:Boolean
}>()
let emits=defineEmits(['update:collapse'])
const shrink=()=>{
  emits('update:collapse',!props.collapse)
}
</script>
 
<style lang="scss" scoped>
.header {
  height: 60px;
  padding: 0 20px;
  display: flex;
  align-items: center;
}
</style>

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

在文件里写入

<template>
  <el-menu
      default-active="1"
      class="el-menu-vertical-demo"
      :collapse="collapse"
  >
    <el-menu-item index="1">
      <el-icon><House></House></el-icon>
      <template #title>导航一</template>
    </el-menu-item>
    <el-menu-item index="2">
      <el-icon><Message></Message></el-icon>
      <template #title>导航二</template>
    </el-menu-item>
    <el-menu-item index="3">
      <el-icon><Grid></Grid></el-icon>
      <template #title>导航三</template>
    </el-menu-item>
    <el-menu-item index="4">
      <el-icon><Tools></Tools></el-icon>
      <template #title>导航四</template>
    </el-menu-item>
  </el-menu>
</template>
 
<script lang="ts" setup>
import {ref} from 'vue'
let props=defineProps<{
  collapse:Boolean
}>()
</script>
 
<style lang="scss" scoped>
.el-menu-vertical-demo:not(.el-menu--collapse) {
  width: 200px;
  min-height: 400px;
}
</style>

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

总结

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

相关文章

  • vue3使用defineModel实现父子组件双向绑定

    vue3使用defineModel实现父子组件双向绑定

    这篇文章主要个给大家介绍了在vue3中使用defineModel进行父子组件中的双向绑定,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-01-01
  • 详解Vue串联过滤器的使用场景

    详解Vue串联过滤器的使用场景

    这篇文章主要介绍了详解Vue串联过滤器的使用场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • vue关于this.$refs.tabs.refreshs()刷新组件方式

    vue关于this.$refs.tabs.refreshs()刷新组件方式

    这篇文章主要介绍了vue关于this.$refs.tabs.refreshs()刷新组件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Vue前端整合Element Ui的教程详解

    Vue前端整合Element Ui的教程详解

    这篇文章主要介绍了Vue前端整合Element Ui,本节内容服务于SpringBoot + Vue 搭建 JavaWeb 增删改查项目,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • vue前端如何将任意文件转为base64传给后端

    vue前端如何将任意文件转为base64传给后端

    这篇文章主要介绍了vue前端如何将任意文件转为base64传给后端问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库

    关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库

    关于Vue.js 2.0 的 Vuex 2.0你需要更新的知识库,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • vue-video-player视频播放器使用配置详解

    vue-video-player视频播放器使用配置详解

    这篇文章主要为大家详细介绍了vue-video-player视频播放器的使用和配置,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • Vue 3 中的 toRef 和 toRefs 函数案例讲解

    Vue 3 中的 toRef 和 toRefs 函数案例讲解

    这篇文章主要介绍了Vue 3 中的 toRef 和 toRefs 函数,toRef 和 toRefs 函数是 Vue 3 中的两个非常有用的函数,它们可以帮助我们更好地管理组件中的响应式数据,并且可以提高组件的性能和用户体验,需要的朋友可以参考下
    2024-06-06
  • vue3封装侧导航文字骨架效果组件

    vue3封装侧导航文字骨架效果组件

    这篇文章主要为大家详细介绍了vue3封装侧导航文字骨架效果组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Vuex之理解state的用法实例

    Vuex之理解state的用法实例

    本篇文章主要介绍了Vuex之理解state的用法实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04

最新评论