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日

相关文章

  • Vue3中简单使用Mock.js方法实例分析

    让我来详细讲解“Vue3中简单使用Mock.js方法实例分析”的完整攻略。 什么是Mock.js Mock.js是一个前端模拟数据生成库,可以轻松生成随机数据,拦截 Ajax 请求及设置模拟数据,支持为前后端分离开发提供帮助。Mock.js可以帮助前端开发人员快速构建原型,演示和测试。 在Vue开发中,我们可以使用Mock.js来模拟后端接口,以方便本地开发…

    Vue 2023年5月28日
    00
  • vue如何获取指定元素

    当我们使用Vue来进行开发时,有时会需要获取指定元素进行进一步操作。Vue提供了多种方式来获取指定元素,下面进行详细讲解。 通过ref获取指定元素 在Vue中通过给元素添加ref属性来获取指定元素。在Vue实例中可以通过this.$refs来访问元素,$refs的值是一个对象,对象的属性名是元素的ref属性值,属性值是元素本身。举个例子: <templ…

    Vue 2023年5月28日
    00
  • vue项目base64字符串转图片的实现代码

    实现base64字符串转图片的代码如下: /** * base64字符串转图片 * @param {String} dataUrl base64字符串 * @return {Object} 图片 Blob 对象 */ function dataURLtoBlob (dataUrl) { const arr = dataUrl.split(‘,’) const…

    Vue 2023年5月27日
    00
  • vue.js指令v-for使用以及下标索引的获取

    Vue.js 是一款流行的渐进式 JavaScript 框架,为开发者提供了丰富多样的语法和指令。其中的 v-for 指令用于遍历数组或对象并渲染相应的内容。下面,我们详细讲解 v-for 的使用及下标索引的获取。 基础使用 v-for 的基本语法为: <div v-for="[item] in [array]"> {{ it…

    Vue 2023年5月27日
    00
  • Vue实现点击按钮下载文件的操作代码(后端Java)

    下面是详细讲解“Vue实现点击按钮下载文件的操作代码(后端Java)”的完整攻略: 1. 前端实现 1.1 创建下载按钮 首先,在Vue的组件中添加一个按钮,用来触发下载操作: <template> <div> <button @click="downloadFile">下载文件</button&…

    Vue 2023年5月28日
    00
  • vuex中的5个属性使用方法举例讲解

    下面是 “vuex中的5个属性使用方法举例讲解” 的详细攻略: 1. State State 是 Vuex 存储数据的地方,类似于组件中的 data。通过处于 Store 对象中的 state 选项来定义,我们可以在模块内或组件中直接通过 this.$store.state 进行访问。 下面是一个 State 的示例,用来存储当前文章列表: // store…

    Vue 2023年5月27日
    00
  • Vue使用watch监听一个对象中的属性的实现方法

    要在Vue中使用watch监听一个对象中的属性,需要先定义需要监听的对象和属性,然后在Vue实例中定义一个相应的watch选项来处理属性变化。下面是实现方法的详细步骤: 步骤一:定义需要监听的对象和属性 首先,我们需要在Vue实例中定义一个对象并指定需要监听的属性。如下所示: new Vue({ data: { user: { name: ‘张三’, age…

    Vue 2023年5月28日
    00
  • Vue页面加载完成后如何自动加载自定义函数

    首先,在Vue中,自动加载自定义函数的最常见的方式是使用Vue的生命周期。在Vue中,每个组件都有钩子函数,在这些钩子函数中,我们可以添加我们自己的代码,以在其相应的生命周期内执行。其中,created、mounted、updated和destroyed是我们能够添加自定义代码的最常见的生命周期函数。 接下来,我将向您展示如何在Vue页面加载完成后自动加载自…

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