Vue实现导航栏菜单

我会为您详细讲解如何使用Vue实现导航栏菜单。

1. 确定导航栏菜单数据格式

首先我们需要确定导航栏菜单的数据格式,一般而言可以使用以下格式:

menuList: [
  {
    name: 'Home',
    path: '/',
    icon: 'el-icon-menu'
  },
  {
    name: 'Service',
    path: '/service',
    icon: 'el-icon-star-off'
  },
  {
    name: 'About',
    path: '/about',
    icon: 'el-icon-info'
  }
]

其中,name 代表菜单名称,path 代表菜单链接,icon 代表菜单图标。

2. 创建菜单组件

接下来,我们可以创建一个菜单组件,用于展示导航栏菜单:

<template>
  <el-menu mode="horizontal" :default-active="active" class="app-menu">
    <el-menu-item v-for="item in menuList" :key="item.name" :index="item.path">
      <i :class="item.icon"></i>
      <span slot="title">{{ item.name }}</span>
    </el-menu-item>
  </el-menu>
</template>

<script>
export default {
  name: 'AppMenu',
  props: {
    menuList: {
      type: Array,
      default: () => []
    }
  },
  data() {
    return {
      active: '/'
    }
  },
  methods: {
    handleSelect(key, keyPath) {
      this.active = key;
      this.$router.push(key);
    }
  }
}
</script>

<style scoped>
.app-menu {
  background-color: #fff;
  border-bottom: 1px solid #ebebeb;
}
</style>

其中,我们使用了 Element UI 组件库中的 Menu 组件,通过 props 接收菜单数据,展示菜单列表,并在菜单项选中时切换路由。

3. 在路由中引用菜单组件

最后,在路由配置中引用菜单组件,并传入菜单数据:

import Vue from 'vue';
import VueRouter from 'vue-router';
import AppMenu from './components/AppMenu.vue';
import Home from './views/Home.vue';

Vue.use(VueRouter);

const routes = [
  {
    path: '/',
    component: Home
  },
  {
    path: '/service',
    component: () => import('./views/Service.vue')
  },
  {
    path: '/about',
    component: () => import('./views/About.vue')
  }
];

const router = new VueRouter({
  routes
});

new Vue({
  router,
  render: h => h(App, [
    h(AppMenu, {
      props: {
        menuList: [
          {
            name: 'Home',
            path: '/',
            icon: 'el-icon-menu'
          },
          {
            name: 'Service',
            path: '/service',
            icon: 'el-icon-star-off'
          },
          {
            name: 'About',
            path: '/about',
            icon: 'el-icon-info'
          }
        ]
      }
    }),
    h(App)
  ])
}).$mount('#app');

这样,在页面中就可以看到带有基本样式的导航栏菜单。

示例1

以下是一个示例,在菜单项上添加二级菜单:

menuList: [
  {
    name: 'Home',
    path: '/',
    icon: 'el-icon-menu'
  },
  {
    name: 'Service',
    path: '/service',
    icon: 'el-icon-star-off',
    children: [
      {
        name: 'SubService1',
        path: '/service/sub1'
      },
      {
        name: 'SubService2',
        path: '/service/sub2'
      }
    ]
  },
  {
    name: 'About',
    path: '/about',
    icon: 'el-icon-info'
  }
]

我们可以在菜单组件中添加以下代码实现二级菜单:

<el-submenu v-if="item.children" :index="item.path">
  <template slot="title">
    <i :class="item.icon"></i>
    <span>{{ item.name }}</span>
  </template>
  <el-menu-item v-for="subItem in item.children" :key="subItem.name" :index="subItem.path">
    <span>{{ subItem.name }}</span>
  </el-menu-item>
</el-submenu>

这样,在 Service 菜单项上就有了 SubService1 和 SubService2 两个子菜单。

示例2

以下是另一个示例,在菜单项上添加角标:

menuList: [
  {
    name: 'Home',
    path: '/',
    icon: 'el-icon-menu'
  },
  {
    name: 'Service',
    path: '/service',
    icon: 'el-icon-star-off',
    badge: 4
  },
  {
    name: 'About',
    path: '/about',
    icon: 'el-icon-info'
  }
]

我们可以在菜单组件中添加以下代码实现角标:

<el-badge v-if="item.badge" :value="item.badge">
  <i :class="item.icon"></i>
  <span slot="badge">{{ item.badge }}</span>
  <span slot="title">{{ item.name }}</span>
</el-badge>
<el-menu-item v-else :index="item.path">
  <i :class="item.icon"></i>
  <span slot="title">{{ item.name }}</span>
</el-menu-item>

这样,在 Service 菜单项上就有了一个带有数字角标的图标。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue实现导航栏菜单 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Vue动态组件与异步组件实例详解

    Vue动态组件与异步组件实例详解 在 Vue 中,可以使用动态组件和异步组件实现按需加载组件,从而提高应用的性能。下面我们详细讲解 Vue 动态组件与异步组件。 动态组件 动态组件是一种将组件挂载到动态绑定的组件上的方式。可以在同一个挂载点上动态地切换不同的组件。 示例1 首先我们需要在 Vue 上下文中注册两个组件:Home 和 User。 // Home…

    Vue 2023年5月27日
    00
  • Vue时间轴 vue-light-timeline的用法说明

    Vue时间轴 vue-light-timeline的用法说明 什么是Vue时间轴 vue-light-timeline Vue时间轴 vue-light-timeline是一个基于Vue.js的时间轴组件库,简单易用且高度自定义。 安装 使用npm命令进行安装: npm install vue-light-timeline –save 如何使用 引入 在V…

    Vue 2023年5月28日
    00
  • 解析vue中的$mount

    下面为你详细讲解解析Vue中的$mount的完整攻略: 1.概述 $mount是Vue实例化后挂载到DOM节点的入口函数,用于手动挂载不适用于el选项的情况。 根据不同的使用场景,$mount呈现出不同的表现,如Static Rendering、Client Side Rendering、Server Side Rendering等. 在解析$mount之前…

    Vue 2023年5月27日
    00
  • vue通过接口直接下载java生成好的Excel表格案例

    首先,需要明确的是,Vue作为前端框架,不能直接操作后端生成的Excel表格,而需要通过后端接口来获取Excel数据并进行下载。因此,我们需要实现以下几个步骤: 创建一个后端接口,用于生成Excel数据,并提供下载Excel文件的接口; 在Vue中使用axios或其它http库请求后端接口,获取Excel数据并下载。 下面针对以上步骤分别进行详细的讲解: 创…

    Vue 2023年5月28日
    00
  • vue实现本地存储添加删除修改功能

    实现本地存储添加删除修改功能,可以通过vue的官方插件vue-localStorage进行实现。 安装vue-localStorage插件 首先需要在项目中安装vue-localStorage插件,可以通过npm进行安装: npm install vue-localstorage –save 在main.js中引入插件 在main.js文件中,引入vue-…

    Vue 2023年5月27日
    00
  • Vue替代vuex的存储库Pinia详细介绍

    关于“Vue替代vuex的存储库Pinia详细介绍”的攻略,我会详细讲解以下几个方面: 什么是Pinia Pinia 的使用方式 Pinia 与 Vuex 的比较 示例说明 1. 什么是Pinia Pinia 是一个基于 Vue 3 的状态管理库,它的官方网站是 https://pinia.esm.dev/ 。 Pinia 是按功能设计的,让您可以轻松管理V…

    Vue 2023年5月27日
    00
  • javascript和jQuery实现网页实时聊天的ajax长轮询

    一、什么是ajax长轮询 Ajax长轮询是指在客户端通过ajax向服务端发起请求,服务端接到请求后,如果有未处理的数据,则返回数据。如果没有未处理的数据,则一直等待,直到有未处理的数据。客户端接收到服务端返回的数据后,再向服务端发送新的请求。这个过程就是长轮询的实现。 二、实现网页实时聊天的ajax长轮询 实现网页实时聊天的ajax长轮询,可以使用JavaS…

    Vue 2023年5月27日
    00
  • Vue前端开发规范整理(推荐)

    当前Vue前端开发已经成为了前端开发中不可或缺的一部分,良好的代码规范可以提升代码质量,减少维护成本,而Vue前端开发规范整理(推荐)的出现,更是为我们提供了一套实践经验,方便我们快速了解和使用规范。 规范内容 Vue前端开发规范整理(推荐)包含以下几个方面的内容: 目录结构规范 命名规范 组件编写规范 视图书写规范 样式书写规范 生命周期使用规范 代码可读…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部