本文介绍: 当 NarBar.vue中绑定展开或收起的变量发生改变时候,右侧的内容不会随着左侧的内容变化而变化,而是会固定在初始位置不动。我们选择垂直导航菜单,后台管理系统彩带一般都可以被折叠,通过绑定一个变量来设定当前是否展开或关闭。侧边导航栏一般用在后台管理系统中,我们用element–plus更容易实现。所以我们需要在父组件中传入一个方法,在子组件触发,并且在。这个问题官网没有具体的解答,但是网上是有相关的处理方式的。中必须将控制展开和收起的变量暴露出去,用vue3中的。而绑定收起或展开的变量在。
背景知识
侧边导航栏一般用在后台管理系统中,我们用element–plus更容易实现
基本布局
我们可以去 element–plus 官网找布局的容器组件,网址:Container 布局容器 | Element Plus
Menu菜单
再去 element–plus 官网找菜单的组件,网址:Menu 菜单 | Element Plus
我们选择垂直导航菜单,后台管理系统彩带一般都可以被折叠,通过绑定一个变量来设定当前是否展开或关闭
具体代码
<template>
<div class="common-layout">
<el-container>
<el-aside class="side" width="collapse">
<!-- 侧边栏 -->
<NarBar ref="narbar"/>
</el-aside>
<el-container>
<el-header height="125px">
<!-- 头部 -->
<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>
<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>
<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 绑定即可控制暴露的变量
根据 element-plus 官网设计容易遇到的问题
<el-aside class="side" width="collapse">
</el-aside>
如果上面的代码把 width 属性设置成 “具体尺寸“px,比如 100 px,当 NarBar.vue中绑定展开或收起的变量发生改变时候,右侧的内容不会随着左侧的内容变化而变化,而是会固定在初始位置不动
原文地址:https://blog.csdn.net/dh99999900/article/details/133869457
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_44164.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。