树组件

Siona

树组件

一、简介

关于树结构形式的效果,在工作中很常见,如:菜单树、权限树、关系组织树等一些展示层级关系的功能。 本文使用组件递归的思想,实现一个树组件,我们先看一下效果图:

树组件三大核心功能

  • 基本功能

    • 根据 json 树结构的数据递归组件展示层级关系(树节点要有缩进问题,树层级越深,越往右靠)
    • 点击树的某个节点给树节点加上一个聚焦状态(点击加上背景色,点击别的地方背景色消失)
    • 点击小图标收起树的子节点(展开与折叠)
    • 统一控制树的展开或者收起(统一展开与统一折叠)
    • 树组件小图标的更改(可以使用插槽,这里笔者使用的类名变量更改的,思想是一样的)
    • 没有数据时,树组件做一个提示没数据(加个判断即可)
    • 事件的传递(点击小图标折叠树节点、点击树节点item)
  • 勾选 ☑️

  • 树节点懒加载

二、具体实现

1. 根据 json 数据,递归组件展示层次关系

let treeData = [
    {
        label: "中国",
        eng: "China",
        children: [
            {
                label: "北京",
                eng: "Beijing"
            },
            {
                label: "上海",
                eng: "Shanghai",
                children: [
                    {
                        label: "徐汇区",
                        eng: "Xuhui"
                    },
                    {
                        label: "浦东新区",
                        eng: "Pudong"
                    }
                ]
            }
        ]
    },
    {
        label: "美国",
        eng: "American",
        children: [
            {
                label: "纽约",
                eng: "NewYork",
                children: [
                    {
                        label: "曼哈顿区",
                        eng: "Manhattan"
                    },
                    {
                        label: "皇后区",
                        eng: "Queen"
                    },
                    {
                        label: "布鲁克林区",
                        eng: "Brooklyn"
                    }
                ]
            }, {
                label: "华盛顿",
                eng: "Washington"
            }
        ]
    }
]

首先定义两个组件:TreeTreeItem。其中 Tree 是主组件,用于暴露给外部使用;TreeItem 是用于递归的组件。

<Tree :treeData="treeData"></Tree>

2. 点击节点实现聚焦状态

3. 点击小图标,收起子节点(展开与折叠)

4. 统一控制树的展开 or 收起(统一展开与统一折叠)

5. 小图标更改(插槽 / 类名变量)

6. 暂无数据提示

7. 事件传递(点击小图标折叠树节点、点击树节点 item)

Last Updated 3/2/2024, 4:00:59 PM