vue.js实现三级菜单效果

yizhihongxing

当使用vue.js框架时,实现三级菜单效果需要多个步骤。以下是其中的几个关键步骤:

步骤一:定义Vue实例中的数据结构

定义一个vue实例,包含一个数组,数组每个元素表示一个菜单项,该数组每个元素还包含以下属性:

  • id:唯一标识该菜单项,每个菜单项的id值必须唯一。
  • name:表示该菜单项的名称。
  • children:表示该菜单项包含的子菜单,该属性的值同样是一个菜单数组。

示例:

<template>
  <div>
    <ul>
      <li v-for="menu in menus"
          :key="menu.id"
          :class="{ 'active': menu.id === activeId }"
          @click="setActive(menu.id)"
      >
        {{ menu.name }}
        <ul v-if="menu.children">
          <li v-for="subMenu in menu.children"
              :key="subMenu.id"
              :class="{ 'active': subMenu.id === activeId }"
              @click="setActive(subMenu.id)"
          >
            {{ subMenu.name }}
            <ul v-if="subMenu.children">
              <li v-for="subSubMenu in subMenu.children"
                  :key="subSubMenu.id"
                  :class="{ 'active': subSubMenu.id === activeId }"
                  @click="setActive(subSubMenu.id)"
              >
                {{ subSubMenu.name }}
              </li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      activeId: '',
      menus: [
        {
          id: '1',
          name: 'Menu 1',
          children: [
            {
              id: '1-1',
              name: 'Menu 1-1',
              children: [
                {
                  id: '1-1-1',
                  name: 'Menu 1-1-1'
                },
                {
                  id: '1-1-2',
                  name: 'Menu 1-1-2'
                }
              ]
            },
            {
              id: '1-2',
              name: 'Menu 1-2'
            }
          ]
        },
        {
          id: '2',
          name: 'Menu 2'
        }
      ]
    };
  },

  methods: {
    setActive(id) {
      this.activeId = id;
    }
  }
};
</script>

步骤二:定义菜单项的点击事件处理函数

当菜单项被点击时,需要记录该菜单项是哪一个,以便在显示这个菜单项的子菜单时判断。因此需要定义一个处理函数,将当前点击的菜单项的id值保存在vue的data里面活跃的菜单项id属性中。

示例:

<li v-for="menu in menus"
    :key="menu.id"
    :class="{ 'active': menu.id === activeId }"
    @click="setActive(menu.id)">
    {{ menu.name }}
</li>
methods: {
  setActive(id) {
    this.activeId = id;
  }
}

步骤三:通过computed计算属性获取活跃的菜单项

定义一个computed计算属性,名为activeMenu,用于获取当前活跃的菜单项对象。如果没有活跃的菜单项,则返回空对象。

示例:

computed: {
  activeMenu() {
    let activeMenu = {};
    this.getMenus().every(menu => {
      if (menu.id === this.activeId) {
        activeMenu = menu;
        return false;
      }
      return true;
    });
    return activeMenu;
  }
}

步骤四:渲染菜单项

在页面上循环输出所有菜单项时,需要根据当前菜单项是否为活跃项,以及是否包含子菜单,来渲染不同的菜单结构。

示例:

<template>
  <div>
    <ul>
      <li v-for="menu in menus"
          :key="menu.id"
          :class="{ 'active': menu.id === activeId }"
          @click="setActive(menu.id)"
      >
        {{ menu.name }}
        <ul v-if="menu.children">
          <li v-for="subMenu in menu.children"
              :key="subMenu.id"
              :class="{ 'active': subMenu.id === activeId }"
              @click="setActive(subMenu.id)"
          >
            {{ subMenu.name }}
            <ul v-if="subMenu.children">
              <li v-for="subSubMenu in subMenu.children"
                  :key="subSubMenu.id"
                  :class="{ 'active': subSubMenu.id === activeId }"
                  @click="setActive(subSubMenu.id)"
              >
                {{ subSubMenu.name }}
              </li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </div>
</template>

三级菜单效果成功实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue.js实现三级菜单效果 - Python技术站

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

相关文章

  • Vue列表渲染v-for的使用案例详解

    下面是“Vue列表渲染v-for的使用案例详解”的完整攻略。 什么是Vue列表渲染 Vue.js是一个数据驱动的JavaScript框架,该框架可以将数据和DOM元素绑定在一起,实现视图和数据的同步更新。这使得数据的展示和渲染非常容易实现,使网页的开发变得更高效和简洁。 Vue中的列表渲染就是一种数据渲染方式,它可以根据一个数组自动创建一些DOM元素,以此来…

    Vue 2023年5月27日
    00
  • vue实现实时搜索显示功能

    要实现Vue实时搜索显示功能,有以下几个步骤: 创建Vue实例 绑定数据 创建搜索过滤器 创建搜索输入框 显示搜索结果 下面我们来详细讲解这个完整攻略。 创建Vue实例 首先要创建Vue实例,这可通过引入Vue库来实现。需要在HTML文件中引入如下代码: <script src="https://cdn.jsdelivr.net/npm/vu…

    Vue 2023年5月27日
    00
  • 关于axios不能使用Vue.use()浅析

    关于axios不能使用Vue.use()浅析 在vue项目中,我们通常使用axios来进行网络请求。然而,有些人会发现在使用Vue.use()加载axios插件时会报错,而直接在组件中使用axios却没有问题。这是因为axios并不是一个Vue插件,不能通过Vue.use()方法进行加载。下面将详细讲解这个问题以及如何解决。 问题分析 在一个Vue项目中,我…

    Vue 2023年5月28日
    00
  • 98道经典Vue面试题总结

    感谢您对本网站的关注,以下是关于《98道经典Vue面试题总结》的完整攻略。 一、前言 Vue.js 是一款流行的前端框架,已经成为很多企业和公司的项目必备技术。但是随着 Vue 的普及,Vue 面试题也越来越多,Vue 面试有可能会考到一些比较深入的知识点。因此,对于很多初学者来说,学习 Vue 的同时,也要去了解一些常见的面试题。 本篇文档涵盖了98道面试…

    Vue 2023年5月28日
    00
  • vue数据字典取键值方式

    当我们使用Vue来进行前端开发时,经常会用到数据字典。而获取数据字典的键值可以通过以下两种方法来实现。 方法一:使用计算属性 计算属性是Vue提供的一个能够对数据进行监听并保持响应式的一个特性。可以通过这个特性来进行数据字典的取值。 首先,我们需要定义一个数据字典的对象,例如: const dict = { 1: ‘男’, 2: ‘女’ } 然后,在使用该数…

    Vue 2023年5月29日
    00
  • java实现客户端向服务器发送文件

    实现客户端向服务器发送文件可以通过使用Java的Socket编程实现。如下是实现步骤的完整攻略: 建立Socket连接:服务器端的Socket监听客户端的请求,客户端需要使用Socket来连接服务器。 ServerSocket server = new ServerSocket(12345); 建立时Socket连接后客户端向服务器传输文件,在客户端中使用F…

    Vue 2023年5月28日
    00
  • web前端Vue报错:Uncaught (in promise) TypeError:Cannot read properties of nu解决

    当Vue前端页面在使用axios进行数据请求时,经常会出现Uncaught (in promise) TypeError的报错信息。这个错误通常是由于在Vuex中获取数据时,出现了异步请求和数据加载的问题。下面给出一个完整的攻略来解决这个问题。 查看报错信息 首先,我们需要仔细查看报错信息,找出报错的具体位置以及错误类型。出现这个错误时,通常会给出错误的具体…

    Vue 2023年5月28日
    00
  • vue如何把组件方法暴露到window对象中

    把Vue组件方法暴露到window对象中可以让全局代码可以使用该Vue组件中的方法,这对于项目的复杂度和开发效率有着很大的帮助。以下是详细的攻略: 第一步:在组件中定义可以暴露的方法 首先,在Vue组件中定义要暴露的方法: <template> <div> <button @click="sayHello()&quot…

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