Vue recursively implements three-level menu

Vue recursively implements three-level menu

This article example shares the specific code of Vue recursively implementing the three-level menu for your reference. The specific content is as follows

Parent Component

<template>
    <div class="menu-level-menu menu-level-menu-enter" v-if="showLevelMenu">
      <menu-item class="menu-item" :menuDate="menuList"></menu-item>
    </div>
</template>

Subcomponents

<template>
  <div>
    <div class="" v-for="(menu, index) in menuDate" :key="index">
    // Each menu item <div class="menu-row" @click="menuSpread(menu)"
           :class="[{'menu-row-selected': menu.selected && menu.children.length <= 0}]">
        <div class="menu-row-left">
          <div class="menu-row-left-line" :class="[{'menu-selected': menu.selected && menu.children.length <= 0}]"></div>
          <i class="iconfont" :class="[menu.menuIcon, {'color-icon': showIconColor(menu)}]"></i>
        </div>
        <div class="menu-row-right">
          <span :class="[{'font-16': menu.level === '0'}]">{{menu.menuName}}</span>
          <i class="c" v-if="menu.children.length <= 0"></i>
          <i class="iconfont icon-liebiaoxiala" v-if="menu.children.length>0 && !menu.selected"></i>
          <i class="iconfont icon-liebiaoshouqi" v-if="menu.children.length>0 && menu.selected"></i>
        </div>
      </div>
      // Recursively display the menu <menu-item v-show="menu.selected" v-if="menu.children.length>0" :menuDate="menu.children"></menu-item>
    </div>
  </div>
</template>
<script>
  export default {
    props: {
      menuDate: Array
    },
    name: 'MenuItem',
    methods: {
      menuSpread (menu) {
        if (menu.menuRouter) this.$router.push(menu.menuRouter);
        menu.selected = !menu.selected;
        this.recursion(this.menuDate, menu);
      },
      recursion (all, temp) {
        all.forEach(item => {
          if (item.menuName !== temp.menuName) {
            item.selected = false;
            this.recursion(item.children, temp);
          }
        });
      },
      showIconColor (menu) {
        let show = false;
        if (menu.level === '0') {
          menu.children.forEach(item => {
            if (item.children.length <= 0 && item.selected) {
              show = true;
            }
            if (item.children.length > 0) {
              item.children.forEach(item => {
                if (item.selected) {
                  show = true;
                }
              });
            }
          });
        }
        return show;
      }
    }
  };
</script>

Rendering

The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM.

You may also be interested in:
  • Vue+element uses dynamic loading routing to implement the operation of displaying the three-level menu page
  • Vue.js realizes the three-level menu effect
  • Vue implements the background management permission system and the top bar three-level menu display function
  • How to change the secondary menu of Vue iview-admin framework to the third-level menu
  • The linkage method between menu and tab of vue+iview
  • Vue implements left and right menu linkage implementation code
  • Vue realizes three-level linkage of city selection based on mint-ui
  • Detailed explanation of Vue, element-ui, and axios to achieve three-level linkage between provinces, cities and districts
  • Example of how vue + elementUI can achieve three-level linkage between provinces, cities and counties
  • Vue implements three-level linkage dynamic menu

<<:  Docker deploys Laravel application to realize queue & task scheduling

>>:  MySQL 5.7.21 Installer Installation Graphic Tutorial under Windows 10

Recommend

How to solve the mysql ERROR 1045 (28000)-- Access denied for user problem

Problem description (the following discussion is ...

Detailed explanation of Angular structural directive modules and styles

Table of contents 1. Structural instructions Modu...

CSS hacks \9 and \0 may not work for hacking IE11\IE9\IE8

Every time I design a web page or a form, I am tr...

Detailed explanation of importing/exporting MySQL data in Docker container

Preface We all know that the import and export of...

Web Design Experience: 5 Excellent Web Design Concepts Full Analysis (Pictures)

Unlike other types of design, web design has been ...

jQuery manipulates cookies

Copy code The code is as follows: jQuery.cookie =...

Learn to deploy microservices with docker in ten minutes

Since its release in 2013, Docker has been widely...

The difference between z-index: 0 and z-index: auto in CSS

I've been learning about stacking contexts re...

Detailed steps to install MySQL 8.0.27 in Linux 7.6 binary

Table of contents 1. Environmental Preparation 1....

Docker installs and runs the rabbitmq example code

Pull the image: [mall@VM_0_7_centos ~]$ sudo dock...

Code for aligning form checkbox and radio text

Alignment issues like type="radio" and t...

Using CSS3 to achieve transition and animation effects

Why should we use CSS animation to replace JS ani...