本文介绍: 当 NarBar.vue绑定展开收起变量发生改变时候右侧内容不会随着左侧的内容变化而变化,而是会固定初始位置不动。我们选择垂直导航菜单后台管理系统彩带一般都可以折叠通过绑定一个变量来设定当前是否展开关闭侧边导航栏一般用在后台管理系统中,我们elementplus更容易实现。所以我们需要在父组件中传入一个方法,在子组件触发,并且在。这个问题官网没有具体的解答,但是网上是有相关处理方式的。中必须将控制展开收起变量暴露出去,用vue3中的。而绑定收起展开变量在。

背景知识

侧边导航栏一般用在后台管理系统中,我们elementplus更容易实现

基本布局

 我们可以elementplus 官网布局容器组件网址Container 布局容器 | Element Plus

我们一般选择这个布局侧边导航栏

Menu菜单

再去 elementplus 官网菜单组件,网址:Menu 菜单 | Element Plus

我们选择垂直导航菜单后台管理系统彩带一般都可以折叠通过绑定一个变量来设定当前是否展开关闭

具体代码

App.vue

<template>
  <div class="common-layout">
    <el-container>
        <el-aside class="side"  width="collapse"&gt;
          <!-- 侧边栏 --&gt;
          <NarBar ref="narbar"/&gt;
        </el-aside&gt;
      <el-container&gt;
        <el-header height="125px"&gt;
                 <!-- 头部 --&gt;
          <el-card class="box-card" >
            <HeaderContent ref="headerContent" @updateNarBar="updateNarBar"/>
          </el-card>
        </el-header>
        <el-main>
              <!-- 内容 -->
              <router-view />
        </el-main>
      </el-container>
    </el-container>
  </div>
</template>
<script setup>
import NarBar from './components/NarBar.vue';
import HeaderContent from './components/HeaderContent.vue';

import { ref } from 'vue';
const narbar = ref(null);

const updateNarBar = () => {
    narbar.value.isCollapse = !narbar.value.isCollapse;
}

</script>

<style>
*{
  padding: 0%;
  margin: 0%;
}
</style>

引入的 NarBar.vue 源码

<template>
    <el-menu
      default-active="2"
      class="el-menu-vertical"
      :collapse="isCollapse"
      @open="handleOpen"
      @close="handleClose"
    >
    <el-menu-item index="1" class="titleName">
          <el-icon><Management /></el-icon>
          <template #title>图书借阅管理</template>
    </el-menu-item>

      <el-sub-menu index="2" class="menu">
        <template #title>
          <el-icon><Management /></el-icon>
          <span>图书信息维护</span>
        </template>
          <el-menu-item index="1-1" class="menu" @click="$emit('addTab','LibrarySortEnter','图书分类录入')">图书分类录入</el-menu-item>
          <el-menu-item index="1-2" class="menu" @click="$emit('addTab','StorePositionEnter','存放位置录入')">存放位置录入</el-menu-item>
          <el-menu-item index="1-3" class="menu">图书录入</el-menu-item>
      </el-sub-menu>

      <el-sub-menu index="3" class="menu">
        <template #title>
          <el-icon><Management /></el-icon>
          <span>会员信息维护</span>
        </template>
          <el-menu-item index="2-1" class="menu">会员表</el-menu-item>
      </el-sub-menu>
      
      <el-sub-menu index="4" class="menu">
        <template #title>
          <el-icon><Management /></el-icon>
          <span>图书信息维护</span>
        </template>
          <el-menu-item index="3-1" class="menu">图书借阅单</el-menu-item>
          <el-menu-item index="3-2" class="menu">借阅明细</el-menu-item>
          <el-menu-item index="3-3" class="menu">图书归还单</el-menu-item>
      </el-sub-menu>



    </el-menu>
  </template>
  
  <script setup>
  import { ref,defineExpose } from 'vue'
  import { Management } from '@element-plus/icons-vue'

   const isCollapse = ref(false)
  
   const handleOpen = (key, keyPath) => {
    console.log(key, keyPath)
  }
   const handleClose = (key, keyPath) => {
    console.log(key, keyPath);
  }

  defineExpose({
    isCollapse,
})
  </script>
  
  <style scoped>
  .el-menu-vertical,.el-menu-vertical:not(.el-menu--collapse){
    height: 100vh;
  }
  .titleName{
    font-size: 24px;
    font-weight: 600;
  }
  .menu{
  font-size: 14px;

  }
  </style>
  

引入HeaderContent.vue 源码

<template>
     <div class="header_toolbars">
              <el-icon  class="closeMenu left" :size="16" 
              @click="$emit('updateNarBar')"><Fold /></el-icon>
              <span class="welcome left" >欢迎进入图书借阅系统</span>
              <!-- <el-icon  class="setting right"
          ><setting/></el-icon> -->
      </div>
     
</template>

<script setup>
import { Fold } from '@element-plus/icons-vue'


</script>


<style scoped>
.welcome{
    display: inline-block;
    color: rgb(166,153,153);
    font-size: 18px;
}
.left{
    text-align: left;
}
.right{
    text-align: right;
}
.header_toolbars{
    line-height: 64px;
    height: 64px;
}
.toolbar_left{
    text-align: left;
}
.toolbar_right{
    text-align: right;
}
.setting:hover{
    background-color: rgb(246,246,246);
    cursor: pointer;
}
.tabs > .el-tabs__content {
    padding: 32px;
    color: #6b778c;
    font-size: 32px;
    font-weight: 600;
}
  .closeMenu{
    cursor: pointer;
    margin-right: 10px;
    height: 64px;
    width: 50px;
  }
  .closeMenu:hover
  {
    background-color: rgb(242,242,242);
  }
</style>

核心解释

因为点击收起展开按钮在 HeaderContent.vue 中,而绑定收起展开变量NarBar.vue中,所以我们需要在父组件中传入一个方法,在子组件触发,并且在  NarBar.vue 中必须将控制展开收起变量暴露出去,用vue3中的 defineExpose 方法,在通过 ref 绑定即可控制暴露的变量

tips:父组件为  App.vue

根据 element-plus 官网设计容易遇到问题

<el-aside class="side"  width="collapse">
</el-aside>

如果上面的代码width 属性设置成  “具体尺寸“px,比如 100 px,当 NarBar.vue中绑定展开或收起的变量发生改变时候,右侧的内容不会随着左侧的内容变化而变化,而是会固定初始位置不动

如何解决

简单,不设置“具体尺寸“px 这种格式即可

这个问题官网没有具体的解答,但是网上是有相关处理方式


代码问题或有疑问欢迎在评论讨论

原文地址:https://blog.csdn.net/dh99999900/article/details/133869457

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_44164.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注