Maison > interface Web > js tutoriel > le corps du texte

Comment implémenter le composant de menu arborescent récursif dans vuejs (tutoriel détaillé)

亚连
Libérer: 2018-06-12 10:42:19
original
1869 Les gens l'ont consulté

Cet article présente principalement l'implémentation du composant de menu arborescent récursif dans vuejs. Maintenant, je le partage avec vous et le donne comme référence.

Avant-propos

Il y a quelque temps, j'ai utilisé vue pour construire un système de gestion backend, dans lequel les composants récursifs étaient le plus utilisés, et en raison de ma méconnaissance du système officiel documents, j'ai marché dessus. J'ai rencontré beaucoup d'embûches, alors je les ai écrits et partagés avec tout le monde aujourd'hui.

Composants récursifs

Un composant peut s'appeler de manière récursive dans son modèle, uniquement s'il dispose de l'option name. Cette phrase sur le site officiel indique que le composant de définition clé doit avoir un attribut de nom.

Le format des données de simulation est le suivant :

[
  {
   "id": "1",
   "menuName": "基础管理",
   "menuCode": "10",
   "children": [
    {
     "menuName": "用户管理",
     "menuCode": "11"
    },
    {
     "menuName": "角色管理",
     "menuCode": "12",
     "children": [
      {
       "menuName": "管理员",
       "menuCode": "121"
      },
      {
       "menuName": "CEO",
       "menuCode": "122"
      },
      {
       "menuName": "CFO",
       "menuCode": "123"
      },
      {
       "menuName": "COO",
       "menuCode": "124"
      },
      {
       "menuName": "普通人",
       "menuCode": "124"
      }
     ]
    },
    {
     "menuName": "权限管理",
     "menuCode": "13"
    }
   ]
  },
  {
   "id": "2",
   "menuName": "商品管理",
   "menuCode": ""
  },
  {
   "id": "3",
   "menuName": "订单管理",
   "menuCode": "30",
   "children": [
    {
     "menuName": "订单列表",
     "menuCode": "31"
    },
    {
     "menuName": "退货列表",
     "menuCode": "32",
     "children": []
    }
   ]
  },
  {
   "id": "4",
   "menuName": "商家管理",
   "menuCode": "",
   "children": []
  }
 ]
Copier après la connexion

html Notre idée est de définir li dans ul, ul illimité définit li, et le titre est enveloppé avec l'élément p,

<template>
 <li>
  <span @click="toggle">   <!-- toggle:点击关闭展开 -->
   <i v-if="isFolder" class="icon" :class="[open ? &#39;folder-open&#39; : &#39;folder&#39;]" @cilck="toggle"></i>
   <!-- <i v-if="isFolder" class="icon " :class="[open ? &#39;folder-open&#39; : &#39;folder&#39;]"></i> -->
   <i v-if="!isFolder" class="icon folder-text"></i>
   {{model.menuName}}
  </span>
  <ul v-show="open" v-if="isFolder">
   <treeMenu v-for="item in model.children" :model="item"></treeMenu>
  </ul>
 </li>
</template>
Copier après la connexion

Officiel Le composant récursif écrit dans le document met l'accent sur l'utilisation de l'attribut name

Il convient de noter que les données transmises par le composant parent doivent d'abord être copiées en profondeur

Copie approfondie : attribuez des accessoires aux données, faites une copie approfondie tout en attribuant la valeur, JSON.parse(JSON.stringify(this value is suffisant)) dans les données, nommez vous-même la valeur des données

export default {
  name: &#39;treeMenu&#39;,
  //props: [&#39;model&#39;], //这样和下面效果一样
  props: {
   model: { type: Object },
  },
  components: {},
}
Copier après la connexion

Selon l'idée de​​vue, sans utiliser l'arborescence Dom, nous définissons deux variables, une pour afficher et masquer le sous-menu (open), et une pour enregistrer le sous-menu et modifier l'icône (isFolder).

  data() {
   return {
    open: false, //一个显示隐藏子菜单(open)
    //isFolder: true  //这个不要写死,运用计算属性计算看存不存在
   }
  },
Copier après la connexion

Utilisez les propriétés calculées de vue pour changer dynamiquement la valeur d'isFolder, modifier l'icône et déterminer s'il y a des enfants et la longueur des enfants

  computed: {
   isFolder() { //利用vue计算属性动态改变isFolder的值,修改图标,判断存在不子级和子级长度
    // return this.model.children && this.model.children.length //和下面效果一样
    let isFolder = false
    if (this.model.children && this.model.children.length) {
     isFolder = true;
    } else {
     isFolder = false;
    }
    return isFolder
   }
  },
Copier après la connexion

Afficher les événements cachés

  methods: {
   toggle() {
    if (this.isFolder) {
     this.open = !this.open
    }
   }
  },
Copier après la connexion

Afficher les événements cachés

En écrivant ceci, nous avons complété un menu arborescent

Ce qui précède est ce que j'ai compilé pour tout le monde. J'espère que cela sera utile à tout le monde à l'avenir.

Articles associés :

Réponse détaillée : Quel impact les changements de vue ont-ils sur les composants ?

Comment implémenter un système de loterie en utilisant JavaScript

Problèmes liés à la transmission de valeurs dans layui

Comment construire helloWorld en utilisant vue-cli dans vue

Comment empaqueter en utilisant Parcel

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!