vue处理侧边栏的展开和收起功能

处理侧边栏的展开和收起功能

->(第一步:在vuex的state里面定义侧边栏的宽度)

(*store/index.js实现代码如下) `

const store = createStore({
    state() {
       return {
         //侧边栏的宽度
         asideWidth:"250px",
       }
    },
    mutations:{
        // 定义展开或者收起侧边栏的状态
        handleAsideWidth(state) {
        state.asideWidth = state.asideWidth === "250px"  ?  "64px" : "250px" 
      }
    }
})

`

->(第二步:引入到Header.vue组件中)

(*代码如下)

`

<template>
   <!-- 收起或者展开状态 -->
   <el-icon class="icon-btn" @click="$store.commit('handleAsideWidth')">
   <!--展开图标-->
   <fold v-if="$store.state.asideWidth === '250px'"/>
   <!--收起图标-->
   <Expand v-else/>
   </el-icon>
</template>

`

->(第三步:在引入到Menu.vue组件中)

(*代码如下) `

<template>
  <div class="f-menu" :style="{   width:$store.state.asideWidth }">
   <!-- collapse:侧边栏是否展开 -->
  <el-menu unique-opened  :collapse="isCollapse" default-active="2" class="border-0" router :collapse-transition="false">
  </el-menu>
 </div>
</template>

<!--script部分-->
 <script>
  import { computed } from 'vue'
  import { useStore } from 'vuex'

 //是否折叠
 const store = useStore()

 const isCollapse = computed(() => !(store.state.asideWidth === '250px'))
</script>

<!--样式部分-->

 <style>
 .f-menu {
    /* 加上动画 */
    transition: all 0.2s;
    width: 250px;
    top: 64px;
    bottom: 0;
    left: 0;
    overflow-y: auto;
    overflow-x:hidden;
    @apply shadow-md fixed bg-light-50;
 }
 </style>

`

->(第四步:改变主屏的大小)

(*代码如下) 在src/Layout下的index.vue中 `

<template>
<el-aside :width="$store.state.asideWidth">
<!-- 侧边栏 -->
<Menu></Menu>
</el-aside>
</template>

<!-- 添加一个动画的效果 -->
<style scoped>
  .el-side {
    transition: all 0.2s;
  }
</style>

`

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3中创建一个具有侧边栏和二级菜单的布局可以通过以下步骤完成: 1. 首先,创建一个侧边栏组件(SideBar),可以使用Vue Router来管理路由。在该组件中,定义一个包含菜单项和二级菜单的数据结构。 2. 在SideBar组件的模板中,使用v-for指令循环渲染菜单项和二级菜单。可以使用Vue Router的router-link组件来实现路由导航。 3. 在点击菜单项时,使用Vue的事件处理方法来展开收起二级菜单。可以使用一个布尔值来控制二级菜单的显示与隐藏。 4. 创建二级菜单组件(Submenu),在Submenu组件的模板中,使用v-for指令循环渲染二级菜单项。 5. 在点击二级菜单项时,使用Vue Router的编程式导航来跳转到相应的路由。 下面是一个简单的示例代码: ```html <template> <div class="sidebar"> <ul> <li v-for="item in menu" :key="item.id"> <div @click="toggleSubMenu(item.id)"> {{ item.title }} </div> <ul v-if="item.showSubMenu"> <li v-for="subItem in item.subMenu" :key="subItem.id"> <router-link :to="subItem.route">{{ subItem.title }}</router-link> </li> </ul> </li> </ul> </div> </template> <script> export default { data() { return { menu: [ { id: 1, title: '菜单1', showSubMenu: false, subMenu: [ { id: 1, title: '子菜单1', route: '/submenu1' }, { id: 2, title: '子菜单2', route: '/submenu2' } ] }, { id: 2, title: '菜单2', showSubMenu: false, subMenu: [ { id: 3, title: '子菜单3', route: '/submenu3' }, { id: 4, title: '子菜单4', route: '/submenu4' } ] } ] } }, methods: { toggleSubMenu(itemId) { this.menu.forEach(item => { if (item.id === itemId) { item.showSubMenu = !item.showSubMenu } else { item.showSubMenu = false } }) } } } </script> ``` 这只是一个简单的示例,你可以根据自己的需求进行修改和扩展。同时,你还需要在主应用程序中引入和使用这个侧边栏组件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值