vue项目菜单激活

本文介绍了如何在Vue3.0中动态激活左侧菜单。通过设置精确匹配类名,利用`router-link-active`和`router-link-exact-active`实现菜单高亮。但需注意,由于Vue3.0的改变,`router-link-active`不再适用于非嵌套路由的模糊匹配。示例代码展示了在`app-member-aside.vue`和`router/index.js`中的配置方法,包括个人中心和个人订单路由的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的:动态激活左侧菜单

大致步骤:

  • 添加个人中心路由地址,设置精准匹配类名
  • 添加我的订单路由与组件
router-link-active   当你的路由路径包含 router-link组件的to属性值,当前组件会加上它
router-link-exact-active   当你的路由路径完全和你的router-link组件的to属性值一致,当前组件会加上它

注意:vue3.0 router-link-active 加不上,路由路径包含 且 需要又路由嵌套关系。

  • 例如:/member /member/other 但是不是嵌套路由,不会加上这个类 router-link-active

src/components/app-member-aside.vue

      <h4>我的账户</h4>
      <div class="links">
+        <RouterLink to="/member" exact-active-class="active">个人中心</RouterLink>
        <a href="javascript:;">消息通知</a>
        <a href="javascript:;">个人信息</a>
        <a href="javascript:;">安全设置</a>
        <a href="javascript:;">地址管理</a>
        <a href="javascript:;">我的积分</a>
        <a href="javascript:;">我的足迹</a>
        <a href="javascript:;">邀请有礼</a>
        <a href="javascript:;">幸运抽奖</a>
      </div>
      <h4>交易管理</h4>
      <div class="links">
+        <RouterLink to="/member/order" exact-class="active">我的订单</RouterLink>
        <a href="javascript:;">优惠券</a>

src/router/index.js

const MemberOrder = () => import('@/views/member/order')
          {
            path: '/member/order/',
            // vue3.0 需要有嵌套关系才能模糊匹配    
            component: { render: () => h(<RouterView/>) },
            children: [
              { path: '', component: MemberOrder },
              { path: ':id', component: MemberOrderDetail }
            ]
          }

 

### Vue 3 中菜单与路由配置教程 #### 创建项目结构 为了实现菜单导航和面包屑动态联动的功能,在Vue 3项目中通常会创建如下文件夹结构: - `src/router/index.js`:用于定义应用中的所有路由。 - `src/views/`:放置各个页面组件。 - `src/components/MenuComponent.vue`:自定义菜单组件。 #### 安装依赖库 确保安装了必要的依赖项,如vue-router来管理前端路由以及ant-design-vue提供UI组件[^1]。 ```bash npm install vue-router@next ant-design-vue ``` #### 配置路由规则 编辑`router/index.js`文件设置基础路径模式并导入所需视图组件作为子路由。这里展示了一个简单的例子说明如何关联特定URL到对应的页面显示逻辑: ```javascript // src/router/index.js import { createRouter, createWebHistory } from 'vue-router' import HomeView from '../views/HomeView.vue' const routes = [ { path: '/', name: 'home', component: HomeView, meta: { title: "首页", icon: "" } }, // 更多路由... ] export default createRouter({ history: createWebHistory(), routes }) ``` #### 实现菜单组件 接下来构建一个响应式的侧边栏或顶部导航条目列表,它可以根据当前激活状态改变样式,并且能够监听位置变动事件更新自身选中项. ```html <!-- src/components/MenuComponent.vue --> <template> <a-menu v-model:selectedKeys="selectedKeys"> <a-menu-item :key="item.path" v-for="(item,index) in menuData" @click="handleClick(item)"> {{ item.meta.title }} </a-menu-item> </a-menu> </template> <script setup lang="ts"> import { ref, watchEffect } from 'vue'; import { useRoute, useRouter } from 'vue-router'; let selectedKeys = ref([]); const route = useRoute(); const router = useRouter(); watchEffect(() => { const matchedRoutes = route.matched.filter(record => record.meta && record.meta.title); if (matchedRoutes.length > 0){ selectedKeys.value = [matchedRoutes[matchedRoutes.length - 1].path]; } }); function handleClick(menuItem:any){ router.push({ path: menuItem.path }); } </script> ``` 此部分实现了基本的菜单渲染机制,通过观察路由的变化自动调整高亮选项;点击链接也会触发相应的跳转行为。 #### 动态生成面包屑 最后一步是在布局模板里加入面包屑控件,利用$route对象获取当前位置信息链表从而构造出完整的层级关系表示法。 ```html <!-- 布局文件 Layout.vue 或 App.vue --> <a-breadcrumb style="margin-bottom: 16px;"> <span v-for="match in $route.matched.slice(1)" :key="match.path">{{ match.meta.title }}</span> </a-breadcrumb> ``` 上述代码片段展示了怎样基于已有的路由元数据快速搭建起直观易懂的位置指示器,帮助用户理解所在的具体位置及其上下文环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值