关于VUE + Element 侧边栏页面刷新后不高亮显示的问题

本文介绍如何在Element UI的后台管理系统中实现侧边栏导航的选中状态(高亮显示)在页面刷新后仍能保持不变的方法。通过设置`default-active`属性为当前路由路径`$route.path`来解决此问题。

写后台管理系统 我们会经常用到element,侧边栏导航的时候路由跳转没有问题 但之后页面刷新发现侧边栏的选中状态(高亮显示)没有了,针对这个问题特别提出以下见解:


直接贴代码:

<el-menu
      :default-active="$route.path"
      class="el-menu-vertical-demo"
      @open="handleOpen"
      @close="handleClose"
      text-color="#333"
    >
      <el-menu-item  index="/situation" @click="go('/situation')"
        ><img src="../assets/img/qyts.png" alt="" /><span class="oneName"
          >全员态势</span
        ></el-menu-item
      >
      <el-submenu index="2" @click="go()">
        <template slot="title">
          <!-- <i class="el-icon-user"></i> -->
          <img src="../assets/img/jcsj.png" alt="" />
          <span class="oneName">基础数据</span>
        </template>
        <el-menu-item-group>
          <el-menu-item index="/healthTable" @click="go('/healthTable')" class="twoName"
            >心率监测</el-menu-item
          >
          <el-menu-item index="/healthsleep" class="twoName" @click="go('/healthsleep')">活动状态</el-menu-item>
          <el-menu-item index="/healthmovement" class="twoName" @click="go('/healthmovement')">运动监测</el-menu-item>
          <el-menu-item index="/healthoxygen" class="twoName" @click="go('/healthoxygen')">血氧监测</el-menu-item>
          <el-menu-item index="/temperature" class="twoName" @click="go('/temperature')">体温监测</el-menu-item>
          <el-menu-item index="/police" class="twoName" @click="go('/police')">电子围栏</el-menu-item>
          <el-menu-item index="/Staydetection" class="twoName"  @click="go('/Staydetection')">停留监测</el-menu-item>
        </el-menu-item-group>
      </el-submenu>
      <el-menu-item index="/person" @click="go('/person')">
        <img src="../assets/img/grxx.png" alt="" />
        <span class="oneName">个人信息</span>
      </el-menu-item>
</el-menu>

这里使用了:
router模式,启用该模式会在激活导航时以 index 作为 path 进行路由跳转,所以我将el-menu-item的index设置成了path路由
default-active则是当前激活菜单的index。

之后这里利用了以上两点,将default-active绑定为$route.path,例如当前页面是全员态势,那么就是/situation。这样即使刷新也不会失去高亮显示状态。

<think>嗯,用户想了解如何在Vue项目中使用Element UI实现侧边菜单导航栏,并配置路由和组件。首先,我需要回忆一下Element UI的组件库,特别是菜单部分。记得Element UI有el-menu组件,可以用来做侧边栏导航。然后,路由配置方面,Vue Router是必须的,需要嵌套路由和动态路由吗? 用户提到了引用中的内容,比如静态展示和commonAside组件。可能需要先创建菜单组件,用el-menu-item和el-submenu来构建层级结构。然后,路由配置部分,应该在router/index.js里定义路由,尤其是children属性来实现嵌套。 另外,引用里提到main.vue使用了Container布局容器,所以布局方面可能需要el-container、el-aside和el-main组件。侧边栏放在el-aside里,主内容区用el-main作为路由出口。 还有,菜单的点击事件需要绑定路由跳转,可能用Vue Router的push方法。动态菜单数据的话,可能需要从vuex或者计算属性获取,根据路由配置生成菜单项。可能需要处理有子菜单和无子菜单的情况,用v-if或者计算属性来判断。 步骤大概是:安装依赖、创建布局组件、配置路由、编写菜单组件、绑定路由跳转。然后还要考虑菜单的高亮状态,用router-link-active类或者el-menu的default-active属性。可能需要动态设置default-active,根据当前路由路径。 示例代码部分,需要展示main.vue的结构,包括el-container,el-aside引入commonAside,el-main放router-view。commonAside组件里用el-menu,遍历路由信息生成菜单项,用index属性绑定路由路径,处理点击事件用$router.push。 最后,要检查是否需要嵌套路由,子路由的配置是否正确,以及菜单项如何根据路由配置动态生成。可能还需要处理图标和样式,但用户主要关注功能和路由配置,所以示例代码可以简化样式部分。 用户可能遇到的问题包括路由匹配、菜单高亮正确、点击菜单没反应,这些都需要在步骤中说明如何处理,比如确保路由路径正确,使用vue-router的方法导航,设置默认激活的菜单项。 总结下来,步骤是安装Element UI和Vue Router,创建布局组件,配置路由信息,编写动态菜单组件绑定路由,处理点击事件和高亮状态。示例代码需要覆盖这些方面,并确保语法正确。</think>以下是在Vue项目中使用Element UI实现侧边菜单导航栏的完整实现步骤: ### 一、基础环境搭建 1. 安装依赖 ```bash npm install element-plus vue-router ``` ### 二、布局组件实现 ```vue <!-- main.vue --> <template> <el-container> <el-aside width="200px"> <common-aside :menuData="menuList" /> </el-aside> <el-main> <router-view /> </el-main> </el-container> </template> <script> import CommonAside from &#39;./components/CommonAside.vue&#39; export default { computed: { menuList() { return this.$router.options.routes } }, components: { CommonAside } } </script> ``` ### 三、菜单组件开发 ```vue <!-- CommonAside.vue --> <template> <el-menu :default-active="$route.path" router unique-opened > <template v-for="item in menuData"> <el-submenu v-if="item.children && item.children.length" :index="item.path" :key="item.path" > <template #title> <i :class="item.meta.icon"></i> <span>{{ item.meta.title }}</span> </template> <el-menu-item v-for="child in item.children" :key="child.path" :index="child.path" > {{ child.meta.title }} </el-menu-item> </el-submenu> <el-menu-item v-else :index="item.path" :key="item.path" > <i :class="item.meta.icon"></i> <span>{{ item.meta.title }}</span> </el-menu-item> </template> </el-menu> </template> <script> export default { props: { menuData: { type: Array, default: () => [] } } } </script> ``` ### 四、路由配置示例 ```javascript // router/index.js const routes = [ { path: &#39;/&#39;, component: () => import(&#39;@/views/main.vue&#39;), children: [ { path: &#39;/dashboard&#39;, name: &#39;Dashboard&#39;, meta: { title: &#39;仪表盘&#39;, icon: &#39;el-icon-monitor&#39; }, component: () => import(&#39;@/views/Dashboard.vue&#39;) }, { path: &#39;/user&#39;, meta: { title: &#39;用户管理&#39;, icon: &#39;el-icon-user&#39; }, children: [ { path: &#39;list&#39;, name: &#39;UserList&#39;, meta: { title: &#39;用户列表&#39; }, component: () => import(&#39;@/views/user/List.vue&#39;) } ] } ] } ] ``` ### 五、核心实现要点 1. **路由联动**:通过`router`属性开启vue-router模式,菜单项的index值自动匹配路由路径[^3] 2. **动态激活**:`default-active`绑定`$route.path`实现菜单状态同步[^4] 3. **嵌套处理**:使用`el-submenu`配合路由的children配置实现多级菜单[^1] 4. **数据驱动**:通过计算属性获取路由配置生成菜单结构[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值