vue递归实现三级菜单

  1. 前置知识

在说如何实现三级菜单之前,我们需要先对一些基本概念进行了解,这些概念是实现三级菜单的基础,包括:

  • 父子组件通讯
  • 递归组件

  • 父子组件通讯

在vue中,组件之间的通讯主要有两种方式:props和$emit事件传递。props是父组件向子组件传递数据,而$emit事件传递则是子组件向父组件传递数据。

示例:父组件向子组件传递数据

在父组件中,我们通过在子组件标签上添加props,并传递需要传递的数据。

<template>
  <div>
    <MySubComponent :content="subContent"></MySubComponent>
  </div>
</template>

<script>
import MySubComponent from './MySubComponent.vue'
export default {
  components: { MySubComponent },
  data() {
    return {
      subContent: 'hello world'
    }
  }
}
</script>

而在子组件中,只需在props中声明需要接收的data,然后就可以通过{{}}的形式在模板中引用了。

<template>
  <div>
    {{ content }}
  </div>
</template>

<script>
export default {
  props: {
    content: {
      type: String,
      default: ''
    }
  }
}
</script>
  1. 递归组件

递归组件是指组件自我调用,实现循环嵌套的效果。在vue中,递归组件可以通过在组件内部嵌套组件并使用name属性实现。

示例:简单递归组件

这是一个简单的递归组件示例,实现了向下无限递归的效果。

<template>
  <div>
    <div>{{ level }}</div>
    <ul>
      <li v-for="item in list">
        <MyComponent :level="level + 1" :list="item.list"></MyComponent>
      </li>
    </ul>
  </div>
</template>

<script>
import MyComponent from './MyComponent.vue'
export default {
  name: 'MyComponent',
  components: { MyComponent },
  props: {
    level: {
      type: Number,
      default: 0
    },
    list: {
      type: Array,
      default: () => []
    }
  }
}
</script>
  1. 实现三级菜单

有了前置知识,我们就可以来实现三级菜单了。实现的过程中需要考虑以下几个方面:

  • 一级菜单点击展开二级菜单,再次点击关闭二级菜单
  • 二级菜单点击展开三级菜单,再次点击关闭三级菜单
  • 点击当前菜单以外区域,收起所有菜单

示例:三级菜单组件实现

我们通过创建一个三级菜单组件MyMenu.vue来实现三级菜单的效果。在这个组件中,我们主要需要实现以下几个功能:

  • 初始化一级菜单数据
  • 点击一级菜单,显示和隐藏二级菜单
  • 点击二级菜单,显示和隐藏三级菜单
  • 点击当前菜单以外区域,收起所有菜单

MyMenu.vue的具体实现如下所示:

<template>
  <div class="menu">
    <ul>
      <li v-for="(item, index) in menuData" :key="index">
        <div
          class="menu-item"
          @click="handleMenuClick(item)"
          :class="{ active: activeIndex === index }"
        >
          {{ item.title }}
        </div>
        <div class="sub-menu" v-show="activeIndex === index">
          <MyMenu :data="item.children" v-if="item.children"></MyMenu>
        </div>
      </li>
    </ul>
  </div>
</template>

<script>
import MyMenu from './MyMenu.vue'

export default {
  name: 'MyMenu',
  components: {
    MyMenu
  },
  props: {
    data: {
      type: Array,
      default: () => []
    }
  },
  data() {
    return {
      menuData: this.data,
      activeIndex: -1
    }
  },
  watch: {
    data() {
      this.menuData = this.data
      this.activeIndex = -1
    }
  },
  methods: {
    handleMenuClick(item) {
      this.activeIndex = this.activeIndex === item.index ? -1 : item.index
    },
    handleOutsideClick() {
      this.activeIndex = -1
    }
  },
  mounted() {
    document.addEventListener('click', this.handleOutsideClick)
  },
  beforeUnmount() {
    document.removeEventListener('click', this.handleOutsideClick)
  }
}
</script>
  1. 总结

这就是实现三级菜单的攻略,其中涉及到了vue中的父子组件通讯和递归组件。当然,上文只是一个简单的示例,要实现更为复杂的效果还需要进一步的学习和实践。

阅读剩余 73%

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

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

相关文章

  • windows10系统电脑中如何听收音机

    当然,我很乐意为您提供关于“windows10系统电脑中如何听收音机”的完整攻略。以下是详细的步骤说明: 步骤说明 1.先,您需要购买一个音机硬件设备,并将其连接到您的Windows 10系统电上。收音机硬件设备通会附带一个USB接口或频接口,您可以将其插入到电脑的相应接口上。 接下来,您需要开Windows 10系统电脑,并进“控制面板”。您可以通过在Wi…

    other 2023年5月9日
    00
  • ubuntu下androidstudio安装、配置和使用

    Ubuntu下AndroidStudio安装、配置和使用 Android Studio是Google官方推出的Android应用程序开发工具,只有通过它才能够完整地为Android设备和模拟器开发应用程序。本文将指导您在Ubuntu下安装、配置和使用Android Studio。 安装 步骤1:安装Java 首先,为Android Studio安装Java …

    其他 2023年3月28日
    00
  • 【IDEA插件】—— 代码量统计工具Statistic

    IDEA插件:代码量统计工具Statistic的完整攻略 Statistic是一款IntelliJ IDEA插件,可以帮助开发者统计代码量,包括代码行数、注释行数、空行数等。本文将为您提供一份详细的Statistic插件的完整攻略,包括插件的安装、使用方法和两个示例说明。 插件安装 在使用Statistic插件之前,需要先安装IntelliJ IDEA。可以…

    other 2023年5月5日
    00
  • 探讨:将两个链表非降序合并为一个链表并依然有序的实现方法

    将两个非降序链表合并为一个链表并保持非降序的方法,可以采用以下步骤: 定义一个新链表,当前指针初始化为 NULL。 比较两个链表的头节点,将较小值的节点添加到新链表中,同时将这个链表的指针移动到下一个节点,然后比较两个链表当前节点的值,重复以上步骤,直到遍历完其中一个链表。 将另一个链表中剩余的节点加入新链表的尾部。 具体实现可以参考代码如下: struct…

    other 2023年6月27日
    00
  • String的两种初始化方法讲解

    下面我来详细讲解“String的两种初始化方法讲解”。 String的两种初始化方法讲解 方法一:使用字面量初始化 使用字面量初始化字符串是一种很常见的方式。通过将字符串括在双引号””内来创建一个字符串,例如: String str = "hello world"; 这种初始化方式会在内存中创建一个新的字符串对象,其内容和值都是 “hel…

    other 2023年6月20日
    00
  • 正则表达式i修饰符(大小写不敏感)

    正则表达式是一种强大的文本匹配工具,i修饰符用于指定匹配时忽略大小写。下面是关于正则表达式i修饰符的详细攻略: 语法 在正则表达式中,i修饰符以字母\”i\”表示,可以在正则表达式的末尾添加。例如,/pattern/i表示匹配时忽略大小写。 示例说明 下面是两个示例,说明了正则表达式i修饰符的使用: 示例1:匹配单词 假设我们要匹配一个字符串中的单词\”he…

    other 2023年8月17日
    00
  • Git用户签名的修改取消及优先级拓展教程

    Git用户签名的修改取消及优先级拓展教程 在使用Git时,用户签名是用于标识提交代码的作者的信息,包括用户名与电子邮件地址。在某些情况下,我们可能需要修改或取消默认的用户签名。本文将详细讲解如何进行用户签名的修改和取消以及优先级拓展的操作。 查看当前用户签名信息 首先,我们需要查看当前用户签名信息,可通过以下命令实现: git config user.nam…

    other 2023年6月27日
    00
  • SecureCRT如何修改配置文件夹?SecureCRT修改配置文件夹教程

    SecureCRT是一款用于SSH(Secure Shell)协议的控制台终端模拟软件,它通过提供一种安全、简单的设置来帮助用户控制远程主机并管理多个会话。在使用SecureCRT时,如果我们需要修改配置文件夹,可以按照以下步骤进行操作: 打开SecureCRT,点击菜单栏的“选项”->“全局选项”,弹出“SecureCRT全局选项”窗口。 在“Sec…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部