51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Vue3项目中使用实现菜单导航

1. Element plus组件 {#1.-element-plus%E7%BB%84%E4%BB%B6}

使用Element plus的Menu 菜单和Container 布局容器。 https://element-plus.org/zh-CN/component/menu.html https://element-plus.org/zh-CN/component/container.html

2. 页面布局 {#2.-%E9%A1%B5%E9%9D%A2%E5%B8%83%E5%B1%80}

页面布局如下,点击侧边栏的菜单,在main区域显示对应的页面内容。

<template>
  <div class="app">
    <el-container>
        <!--header 顶栏容器-->
        <el-header><Header></Header></el-header>
        <el-container>
          <!--aside 侧边栏容器-->
          <el-aside width="200px">
            <el-menu router default-active="1">
              <el-menu-item v-for="route in routes" :key="route.path" :index="route.path">
                {{ route.meta.title }}
              </el-menu-item>
            </el-menu>
          </el-aside>
          <!--main 主要区域容器-->
          <el-main>
            <router-view></router-view>
          </el-main>
        </el-container>
        <!--footer 底栏容器-->
        <el-footer><Footer></Footer></el-footer>
      </el-container>
  </div>
</template>

3. 菜单栏的页面路径 {#3.-%E8%8F%9C%E5%8D%95%E6%A0%8F%E7%9A%84%E9%A1%B5%E9%9D%A2%E8%B7%AF%E5%BE%84}

从上文(2. 页面布局)可以看出,菜单项是通过for循环渲染出来的,route 是从计算属性routes 中获取的路由对象,index属性设置为路由的路径。

3.1 页面路由 {#3.1-%E9%A1%B5%E9%9D%A2%E8%B7%AF%E7%94%B1}

使用Vue Router来定义菜单页面的路由,包括路径、组件、元信息。其中元信息的show属性是指是否在菜单页显示(非必须)。

import { createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: \[
// ...
{
path: '/addEvent',
name: 'AddEvent',
component: () =\> import('../views/AddEvent.vue'),
meta: {title: '添加事件', show: true}
},
{
path: '/eventList',
name: 'EventList',
component: () =\> import('../views/EventList.vue'),
meta: {title: '事件列表', show: true}
},
{
path: '/eventHistory',
name: 'EventHistory',
component: () =\> import('../views/EventHistory.vue'),
meta: {title: '执行历史', show: true}
}
\]
})

`export default router`

3.2 页面 {#3.2-%E9%A1%B5%E9%9D%A2}

页面的内容如下(演示使用,内容不重要)。

<template>
  <div class="addEvent">
    <h1>This is an AddEvent page</h1>
  </div>
</template>

\<script\>


export default {
name: 'addEvent'
}
\</script\>

`<style>
</style>
`

3.3 获取页面路由对象 {#3.3-%E8%8E%B7%E5%8F%96%E9%A1%B5%E9%9D%A2%E8%B7%AF%E7%94%B1%E5%AF%B9%E8%B1%A1}

先获取路由实例(3.1 页面路由中定义),然后对路由实例根据元数据的show进行过滤,获取页面路由对象routes。

<script>
import { ElMenu, ElMenuItem } from 'element-plus'
import { useRoute, useRouter } from 'vue-router'
import { computed } from 'vue'
import Header from '@/views/container/Header.vue'
import Footer from '@/views/container/Footer.vue'

export default {
name: 'app',
components: {
ElMenu,
ElMenuItem,
Header,
Footer
},
setup() {
// 获取路由器实例
const router = useRouter()
// 获取当前路由的信息
const route = useRoute()


    // 计算属性,从路由配置中提取菜单项
    const routes = computed(() =&gt; {
      return router.getRoutes().filter(route =&gt; route.meta &amp;&amp; route.meta.title &amp;&amp; route.meta.show)
    })

    return {
      routes
    }



`}
}
</script>`

看看效果 {#%E7%9C%8B%E7%9C%8B%E6%95%88%E6%9E%9C}

以上。

赞(0)
未经允许不得转载:工具盒子 » Vue3项目中使用实现菜单导航