欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > Vue 侧边栏导航栏 el-menu单个item和多个item

Vue 侧边栏导航栏 el-menu单个item和多个item

2025/5/12 8:32:53 来源:https://blog.csdn.net/qq_34556414/article/details/146157844  浏览:    关键词:Vue 侧边栏导航栏 el-menu单个item和多个item

在固钉的下面去写菜单导航栏。

                <el-menu

                   class="aside-menu"

                   router

                   :default-active="$route.path"

                   :collapse="isCollapse"

                   background-color="#131b27"

                   text-color="#bfcbd9"

                   active-text-color="#20a0ff"

:default-active="$route.path":   当前激活菜单的index,栏目与path做了匹配就拿到了path然后激活对应的item,当前打开了哪个页面,那么就会去找item对应的index

    {

        path: '/home',

        component: Layout,

        children: [

            {

                path: '/home',

                name: '概览',

                icon: 'odometer',

                meta: {title: '概览'},

                component: ()=>import('@/views/home/Home.vue'),

            }

        ]

    },

(1)先获取到所有的路由规则, 在routers里面

<template><div style="height:100vh;width:100vw"><el-container style="height:100%;width:100%"><el-aside class="aside" :width="asideWidth"> <el-affix class="aside-affix" :z-index="1200"><div><el-image class="logo-image" :src="logo"></el-image><span :class="[isCollapse ? is-collapse : '']"><span  class="logo-name">Kubernetes</span></span></div>                  </el-affix>   <!--侧边导航栏--><el-menuclass="aside-menu"router:default-active="$route.path":collapse="isCollapse"background-color="#131b27"text-color="#bfcbd9"active-text-color="#20a0ff"><!--拆解路由规则,生成导航栏--><!--1.获取所有的;路由规则--></el-menu></el-aside ><el-container><el-header style="background-color:#b3c0d1">123</el-header><el-main><router-view></router-view></el-main><el-footer>123</el-footer></el-container></el-container></div></template><script>
//这里添加了一个属性routers,要去获取路由规则
import { useRouter } from 'vue-router';export default({data() {return {logo: require('../assets/k8s.png'),asideWidth: '200px',isCollapse: false,routers: []}},mounted() {//获取router中的所有路由规则this.routers = useRouter().options.routesconsole.log(this.routers)}})
</script>

(2)循环item

<!--2.for循环路由规则并且拆解--><template v-for="menu in routers" :key="menu"><!--处理2长度为1的情况,如概要,什么时候展示呢?存在并且长度为1判定为1了,才会走到下面部分,所以数组可以直接使用0--><el-menu-itemclass="aside-menu-item"v-if="menu.children && menu.children.length == 1":index="menu.children[0].path"><!--下面就是要去做具体的展示  图标和名字--><el-icon><component :is="menu.children[0].icon"></component></el-icon><template #title>{{ menu.children[0].name }}</template></el-menu-item>

template在vue里面是什么概念?它类似<div>,但是template不带任何的样式,它是for循环或者要去包裹一层东西,但是包裹不让带任何样式可以使用template。所以这个时候就可以使用template。卡片插槽其实用的也是template一样的逻辑。

:index="menu.children[0].path    要使用router模式的时候,要将其path传到index里面,这样每次点一个路由才会找到对应的path直接进去。如果不是router模式的话是没有用的,所以el-menu里面加了一个router。相当于帮我们封装了一层,帮我们跳转。

<el-icon>是vue的组件element,里面包了一层<component>,这是vue的能力,当时使用到哪个组件,那这里面is是一个动态值。

                          <el-icon><component :is="menu.children[0].icon"></component></el-icon>

item名字要加上template,因为是以插槽的方式去实现的。

                          <template #title>{{ menu.children[0].name }}</template>

到这里单个item就解决了。代码如下:

<template><div style="height:100vh;width:100vw"><el-container style="height:100%;width:100%"><el-aside class="aside" :width="asideWidth"> <el-affix class="aside-affix" :z-index="1200"><div><el-image class="logo-image" :src="logo"></el-image><span :class="[isCollapse ? is-collapse : '']"><span  class="logo-name">Kubernetes</span></span></div>                  </el-affix>   <!--侧边导航栏--><el-menuclass="aside-menu"router:default-active="$route.path":collapse="isCollapse"background-color="#131b27"text-color="#bfcbd9"active-text-color="#20a0ff"><!--拆解路由规则,生成导航栏--><!--1.获取所有的;路由规则--><!--2.for循环路由规则并且拆解--><template v-for="menu in routers" :key="menu"><!--处理2长度为1的情况,如概要,什么时候展示呢?存在并且长度为1判定为1了,才会走到下面部分,所以数组可以直接使用0--><el-menu-itemclass="aside-menu-item"v-if="menu.children && menu.children.length == 1":index="menu.children[0].path"><!--下面就是要去做具体的展示  图标和名字--><el-icon><component :is="menu.children[0].icon"></component></el-icon><template #title>{{ menu.children[0].name }}</template></el-menu-item></template></el-menu></el-aside ><el-container><el-header style="background-color:#b3c0d1">123</el-header><el-main><router-view></router-view></el-main><el-footer>123</el-footer></el-container></el-container></div></template><script>
//这里添加了一个属性routers,要去获取路由规则
import { useRouter } from 'vue-router';export default({data() {return {logo: require('../assets/k8s.png'),asideWidth: '200px',isCollapse: false,routers: []}},mounted() {//获取router中的所有路由规则this.routers = useRouter().options.routesconsole.log(this.routers)}})
</script>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词