vue.js实现三级菜单效果

当使用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组件文档生成备注详解

    Vue组件文档生成是一种非常重要的工具,它能够帮助我们在编写Vue组件的时候方便地生成文档以及API文档,使得我们开发更加快速、准确。本文将从以下几个方面进行详细讲解: 为什么需要使用Vue组件文档生成 在进行Vue组件开发时,我们需要编写大量的文档和API文档,这样才能帮助其他人使用我们的组件。但是手动编写这些文档非常费时费力,而且容易出错,因此我们需要一…

    Vue 2023年5月27日
    00
  • vue页面离开后执行函数的实例

    当我们使用Vue.js来构建前端项目时,有时候需要在页面离开后执行某些操作。这时候我们可以利用Vue的生命周期钩子来实现,在页面离开时执行我们需要的函数。 具体来说,我们可以利用 beforeRouteLeave 钩子在用户离开当前页面前执行某些逻辑。这个钩子会在导航离开当前路由的对应组件时被调用,你可以在该钩子内部访问组件实例 this。 下面是示例代码:…

    Vue 2023年5月28日
    00
  • 详解Vue中localstorage和sessionstorage的使用

    详解Vue中localStorage和sessionStorage的使用 简介 对于一些 Vue.js 开发者来说,localStorage 和 sessionStorage 是存储数据的不错选择,本文将详细介绍这两个 API 的使用,同时说明如何在 Vue.js 组件中使用它们。 localStorage localStorage 是 Web Storag…

    Vue 2023年5月27日
    00
  • 浅谈如何优雅处理JavaScript异步错误

    当我们在JavaScript中处理异步操作的时候,难免会遇到一些错误,如何优雅地处理这些错误是很重要的。以下是几条有用的攻略: 1. Promise捕获错误 在处理异步任务的时候,我们通常会使用Promise。我们可以通过Promise的catch方法来捕获Promise中的错误,然后进行处理。 fetch(‘https://api.example.com’…

    Vue 2023年5月28日
    00
  • 详解.vue文件解析的实现

    详解.vue文件解析的实现 一、背景.vue文件是Vue.js框架中非常重要的文件格式,是Vue.js框架的组件化开发的基础,因此我们需要了解如何实现解析.vue文件。 二、什么是.vue文件 .vue文件是一种包含了Vue.js组件相关代码的文件,通常包含三个部分:template, script和style。其中template用于定义组件的HTML结构…

    Vue 2023年5月27日
    00
  • 深入浅析Vue.js 中的 v-for 列表渲染指令

    当我们使用Vue.js来渲染列表时,v-for指令是最常用的一种方式。这个指令可以迭代遍历一个数组或对象,并根据不同的情况生成DOM元素。本篇文章详细讲解了Vue.js中的v-for指令,包括其语法、用法以及常用技巧,并附有两条实际示例说明。 什么是v-for指令? v-for是Vue.js中的循环迭代指令,用于循环遍历数组或对象的数据并生成DOM元素。 在…

    Vue 2023年5月28日
    00
  • 解决Nginx 配置 proxy_pass 后 返回404问题

    当使用Nginx进行反向代理时,有时会遇到proxy_pass指向的地址返回404的问题。这个问题可能有很多原因,以下提供一些可能解决问题的方法。 确认proxy_pass指向的地址是否正确 首先确保proxy_pass指向的地址是正确的。可以尝试用curl等工具进行测试,以确认proxy_pass地址的正确性。如下面的示例: location /api/ …

    Vue 2023年5月28日
    00
  • VUEJS实战之修复错误并且美化时间(2)

    让我来为您详细讲解一下“VUEJS实战之修复错误并且美化时间(2)”的完整攻略。 1. 简介 本文是继“VUEJS实战之修复错误并且美化时间(1)”之后,对于时间美化功能的扩展。在上一篇文章中,我们已经完成了将时间戳转换为固定格式的日期字符串。但是,我们发现显示出来的时间还是不够美观,需要进行美化。 2. 时间美化 在Vue.js中,我们可以使用Moment…

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