IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 5分钟学会 vue3组件递归 (实现Tree级菜单) -> 正文阅读

[JavaScript知识库]5分钟学会 vue3组件递归 (实现Tree级菜单)

1. 什么是组件递归

通俗的讲 :
组件导入自己本身
②一般 根据 children或是 是否有下一层的属性去判断是否结束。

2.以 Tree 树形菜单为例

在这里插入图片描述

3.代码实现

① Tree.vue 代码:

参数=>解释
onoff() 函数1.通过判断是否在id是否在closeList数组里, 有就删除,没有就添加。
2.在每个标签通过 v-if 判断该id 是否在closeList里 实现显示隐藏
props参数=>
Arr (传入的菜单数据)
index(索引:不用传入,默认为1,根据其大小判断没层向右的偏移量)

代码:

<template>
  <div style="width: 200px">
    <div v-for="item in Arr">
      	<p :style="{ marginLeft: (index - 1) * 10 + 'px'}">
            //判断是否展开
        	<span @click="onoff(item.id)" v-if="item.children">
          		{{ closeList.includes(item.id) ? "?" : "?" }}
        	</span>
        	//内容
        	{{ item.text }}
        
      	</p>
      	//根据传入的值判断 是否需要在递归
        <tree-list
           v-if="item.children && !closeList.includes(item.id)"
          :Arr="item.children"
          :index="index"
          :key="item.id"
        />
    </div>
  </div>
</template>
<script>
import { reactive, toRefs, ref } from "vue";
export default {
  name: "tree-list",
  props: {
       Arr: { type: Array },
       index: { type: Number }
  },
  setup(props) {
    let index = props.index ? props.index : 0;
    index += 1;
    
    const closeList = reactive([]);
    function onoff(id) {
      if (closeList.includes(id)) {
        closeList.splice(closeList.indexOf(id));
      } else {
        closeList.push(id);
      }
    }

    return { ...toRefs(props), closeList, onoff, index};
  },
};
</script>

使用 xxx.vue 使用该组件

<template>
  <tree-list :Arr="Arr" />
</template>
<script>
import treeList from "./Tree.vue";
export default {
  components:{ Tree  },
  setup() {
    const Arr = [
      { id: "1", text: "菜单1", children: [
          {
            id: "2", text: "菜单1-1",children: [
                  {id: "3",  text: "菜单1-1-1"},
                  {id: "3",  text: "菜单1-1-2"}
                ],
          },
        ],
      },
      { id: "2",text: "菜单2"}
    ];
    return {  Arr };
  },
};
</script>

没有这么写样式哦,由精通CSS的小伙伴来完善把!

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 12:59:54  更:2022-02-16 13:00:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:33:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码