vue中封装菜单栏Menu组件

在前端开发过程中我们可能会遇到设计图中所需的组件与组件库的样式不符合,就需要自己动手造轮子,下面以menu菜单栏(横项)为例,展开教学
在这里插入图片描述

html实现自定义的Menu菜单栏组件,首先我们需要考虑的有如下几点:

  1. 选中高亮底部条
  2. 切换子组件时菜单项的选中
  3. 刷新页面时菜单项的选中

实现代码:

<div v-for="(item,index) in navList" :key="item.name">
    <div
        class="navItem"
        @click="go(item.path, index)"
        :class="navIndex === index ? 'activeItem' : ''"
    >{{ item.name }}</div>
</div>

首先用for循环遍历出菜单列表,类名使用动态类名去判断选中项

.navItem {
    cursor: pointer;
    padding: 0 30px;
    font-size: 18px;
    font-weight: 500;
    color: #051128;
    line-height: 75px;
    display: flex;
    flex-direction: column;
    align-items: center;
}

每个菜单项都是一个独立的块元素,为了实现字体居中,这里用到了flex布局

.activeItem {
   color: #3894fb;
}
.activeItem:after {
    content: '';
    position: absolute;
    top: auto;
    bottom: 0;
    right: auto;
    height: 5px;
    width: 40px;
    border-radius: 2px;
    background-color: #3895FB;
}

选中项单独高亮样式处理,底部条使用了伪类,具体根据设计需求来定,这里我们是因为要实现一个圆角矩形的底部条

beforeMount() {
  this.watchRoute(this.$route.path)
},
methods: {
   watchRoute(newVal){
       this.navList.forEach((item,index) => {
           if(newVal.indexOf(item.path) != -1){
               this.navIndex = index
           }
       })
   },
}
watch: {
    // 监听路由变化修改顶部栏选中项
    "$route.path": function(newVal, oldVal) {
        console.log(`new_path = ${newVal}, old_path = ${oldVal}`);
        this.watchRoute(newVal)
    },
    immediate: true,
    deep: true
}

这里监听了路由的变化、进入页面时路由的检查

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于Vue 3的侧边栏封装菜单栏,你可以按照以下步骤进行: 步骤1:创建侧边栏组件 首先,创建一个名为SidebarMenuVue组件,在该组件,可以定义侧边栏的样式、菜单项等。 ```vue <template> <div class="sidebar"> <ul> <li v-for="item in menuItems" :key="item.id" @click="handleItemClick(item)"> {{ item.text }} </li> </ul> </div> </template> <script> export default { data() { return { menuItems: [ { id: 1, text: '菜单项1' }, { id: 2, text: '菜单项2' }, { id: 3, text: '菜单项3' } ] }; }, methods: { handleItemClick(item) { // 处理菜单项的点击事件 console.log(item); } } }; </script> <style scoped> .sidebar { background-color: #f0f0f0; width: 200px; } ul { list-style-type: none; } li { padding: 10px; cursor: pointer; } li:hover { background-color: #ddd; } </style> ``` 步骤2:在主页面使用侧边栏组件 在你的主页面,使用SidebarMenu组件,并传入相应的菜单数据。 ```vue <template> <div> <sidebar-menu></sidebar-menu> <div class="content"> <!-- 主要内容区域 --> </div> </div> </template> <script> import SidebarMenu from '@/components/SidebarMenu.vue'; export default { components: { SidebarMenu } }; </script> <style> .content { margin-left: 200px; /* 与侧边栏宽度保持一致 */ } </style> ``` 通过以上步骤,你就可以在Vue 3封装一个简单的侧边栏菜单栏组件,并在主页面使用它了。你可以根据需要,自定义样式、菜单项的数据以及处理菜单项点击事件的逻辑。希望以上信息对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值