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日

相关文章

  • springboot如何使用vue打包过的页面资源

    为了方便说明,这里将“springboot如何使用vue打包过的页面资源”分为两大部分:前端资源打包和后端资源引入。下面对这两部分进行详细讲解。 一、前端资源打包 1.1 环境准备 在进行前端资源打包之前,需要先安装vue-cli和项目依赖。具体步骤如下: 安装Node.js和npm(已安装可跳过); 使用npm安装vue-cli: bash npm ins…

    Vue 2023年5月28日
    00
  • vue使用json最简单的两种方式分享

    下面是关于“vue使用json最简单的两种方式”的详细讲解攻略。 方式一:使用axios获取json数据 axios是一个基于Promise的HTTP客户端,用于快速、简便地发送HTTP请求。这里我们使用axios获取json数据。 首先,我们需要安装axios: npm install axios –save 然后,在Vue组件中引入axios并发送aj…

    Vue 2023年5月27日
    00
  • uniapp引入模块化js文件和非模块化js文件的四种方式

    下面我将详细介绍 uniapp 引入模块化 js 文件和非模块化 js 文件的四种方式。 引入模块化 js 文件的方式 直接引入 可以通过 import 语句直接引入一个模块化 js 文件,如下所示: import {add, subtract} from ‘@/utils/calculate’; 其中 @ 表示项目根目录,calculate 是 utils…

    Vue 2023年5月27日
    00
  • Vue3响应式对象Reactive和Ref的用法解读

    Vue3响应式对象Reactive和Ref的用法解读 什么是Vue3的响应式对象? Vue3中的响应式对象是指一种特殊的JavaScript对象,它可以被Vue3追踪其变化并进行响应式渲染。在Vue2中,响应式数据的实现是通过ES5提供的Object.defineProperty()方法来实现的,而在Vue3中,响应式数据的实现则是依赖于ES6中的Proxy…

    Vue 2023年5月28日
    00
  • Vue编译器源码分析compileToFunctions作用详解

    Vue编译器源码分析compileToFunctions作用详解 Vue的编译器是Vue的核心组成部分之一,它的作用是将我们编写的模板转换成渲染函数,然后将其挂载到Vue实例上,实现视图的渲染。其中,compileToFunctions方法负责将模板字符串编译成渲染函数,本文对该方法进行详细说明。 compileToFunctions方法的作用和参数 com…

    Vue 2023年5月27日
    00
  • vue.js在标签属性中插入变量参数的方法

    在Vue.js中,我们可以使用{{ }}来插入数据,这个特性被称为数据绑定。但在某些情况下,我们想要在标签属性中插入变量,该怎么做呢?下面是详细攻略和示例说明。 使用v-bind指令 在 Vue.js 中,我们可以使用指令 v-bind 来动态地绑定一个或多个属性,这也是在标签属性中插入变量的一种方式。 示例1:动态绑定class属性 <templat…

    Vue 2023年5月27日
    00
  • vue如何清除地址栏参数

    清除地址栏参数是指在使用 Vue.js 进行路由跳转时,能够清除地址栏中的参数,保证进入页面时的地址栏参数为空,避免出现错误。本文将详细介绍如何实现 Vue.js 清除地址栏参数的方法及其示例。 方法一:使用 beforeRouteUpdate 钩子函数 beforeRouteUpdate 钩子函数可以在组件重用时调用,我们可以在这个钩子函数里面清除地址栏参…

    Vue 2023年5月28日
    00
  • 详解使用vuex进行菜单管理

    对于“详解使用Vuex进行菜单管理”的完整攻略,以下是步骤和示例说明: 1. 确定Vuex的状态管理 在使用Vuex进行菜单管理之前,需要确定有哪些状态需要在Vuex中进行管理。在本教程中,我们需要管理的状态有: 菜单数据:用于渲染整个菜单。 当前菜单项:用于存储当前选择的菜单项,以便在页面中高亮显示。 打开的菜单项:用于存储当前展开的菜单项。 你可以在Vu…

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