如何使用Vue和Element-UI实现树形结构的数据展示

Vue和Element-UI是目前非常流行的前端框架,在前端开发中可以提高开发效率,提供了很多方便快捷的API,今天我们来探讨如何使用Vue和Element-UI实现树形结构的数据展示。

1. Element-UI的基本概念

Element-UI是一套基于Vue.js 2.0的桌面端组件库,是由饿了么前端团队开发维护的一个开源项目,提供了丰富的PC端组件,包括表格、表单、弹窗、菜单、导航等等。使用Element-UI可以快速搭建一个漂亮、易用、高性能的PC端界面。

2. 树形结构数据的展示

树形结构是一种常见的数据结构,在前端开发中也经常用到。我们将树形数据展示在网页上,一般采用嵌套列表的方式,通过缩进或者图标来表示层级关系。在Vue和Element-UI中,展示树形数据可以采用el-tree组件。

2.1 el-tree组件的基本使用

el-tree是Element-UI中的树形组件,具有很好的交互性和扩展性。在使用前需要先引入Element-UI库和Vue库。

下面是一个最基本的使用例子:

//引入Element-UI组件库和Vue库

import Vue from 'vue'

import ElementUI from 'element-ui'

import 'element-ui/lib/theme-chalk/index.css'

Vue.use(ElementUI)

// Vue组件定义

export default {

data () {

return {

// 树形数据

treeData: [

{

label: '一级 1',

children: [

{

label: '二级人员 1-1',

children: [

{

label: '三级人员 1-1-1'

},

{

label: '三级人员 1-1-2'

}

]

},

{

label: '二级人员 1-2',

children: [

{

label: '三级人员 1-2-1'

},

{

label: '三级人员 1-2-2'

}

]

}

]

}

]

}

},

// 模板

template: `

<div class="myTree">

<el-tree

:data="treeData">

</el-tree>

</div>

`

}

以上代码中,我们定义了一个Vue组件,包括一个树形数据treeData和一个el-tree组件。通过el-tree组件的:data属性来传递树形数据,组件会自动解析并显示树形结构。

2.2 el-tree组件的高级使用

在实际开发中,我们可能需要对el-tree组件进行定制化配置,包括:

- 自定义节点内容

- 显示图标

- 多选/单选

- 可拖拽排序

- 异步加载节点等

下面我们将针对这些需求展开讨论。

2.2.1 自定义节点内容

el-tree组件默认根据数据的label属性来展示节点内容,但是我们也可以根据需要自己定义节点的展示内容。

例如,我们需要在节点前面显示一个图标,可以通过el-tree组件的scopedSlots属性来自定义节点内容:

//定义模板

<template slot-scope="props">

<span class="el-tree-node__icon el-icon-user"></span>

<span class="el-tree-node__label">{{ props.label }}</span>

</template>

//将模板作为el-tree的插槽使用

<el-tree :data="treeData">

<template slot="label" slot-scope="props">

<span class="el-tree-node__icon el-icon-user"></span>

<span class="el-tree-node__label">{{ props.label }}</span>

</template>

</el-tree>

以上代码中,我们通过slot-scope="props"来获取节点数据props,并根据需要自定义节点展示内容。

2.2.2 显示图标

在树形结构中,经常需要显示节点类型,例如文件夹、文件等。这时可以通过el-tree组件的props属性来定制节点的图标。

例如,我们可以通过props属性将文件夹节点的图标设置为el-icon-folder,文件节点的图标设置为el-icon-document

// 定义props

<el-tree :data="treeData" :props="treeProps"></el-tree>

// 设置treeProps

export default {

data () {

return {

treeData: [

{

label: '文件夹1',

children: [

{

label: '文件1'

},

{

label: '文件2'

}

]

},

{

label: '文件夹2',

children: [

{

label: '文件3'

},

{

label: '文件4'

}

]

}

],

treeProps: {

children: 'children',

label: 'label',

isLeaf: node => node.type === 'file',

icon: node => node.type === 'folder' ? 'el-icon-folder' : 'el-icon-document'

}

}

}

}

以上代码中,我们通过treeProps对象来自定义节点的props属性,其中children表示子节点的数组属性名,label表示节点名称的属性名。通过isLeaf属性判断节点是否是叶子节点,如果是文件类型节点则返回true,如果是文件夹类型节点则返回false。通过icon属性根据节点类型返回不同的图标样式。

2.2.3 多选/单选

el-tree组件支持多选和单选两种选择模式。通过show-checkbox属性来控制是否显示多选框,el-tree会根据选择模式来返回选中的节点或者节点的key。

// 多选模式

<el-tree :data="treeData" show-checkbox check-strictly></el-tree>

// 单选模式

<el-tree :data="treeData" :props="props" node-key="id" highlight-current></el-tree>

以上代码中,el-tree组件的show-checkbox属性为true时表示开启多选模式。另外,check-strictly表示选中节点时是否关联子节点。

如果要开启单选模式,则需要设置node-key属性,这个属性是每个节点的唯一标识。在单选模式下,el-tree会根据给定的标识来返回选中的节点。

2.2.4 可拖拽排序

除了默认的节点展开和收起,我们可能还需要节点的拖拽排序功能。el-tree组件提供了draggable属性来开启拖拽排序功能。开启后,可以通过拖拽节点来改变节点的层级关系或者改变节点在同级别节点的位置。

//开启可拖拽排序

<el-tree :data="draggableData" draggable></el-tree>

以上代码中,el-tree组件的draggable属性为true时表示开启可拖拽排序功能。需要注意的是,如果树形数据的节点层级较多,开启拖拽排序时会增加用户操作的复杂度,此时需要慎重考虑开启与否。

2.2.5 异步加载节点

在实际开发中,我们可能需要在节点展开时动态加载子节点数据。el-tree组件提供了lazy属性来支持异步加载节点功能。开启异步加载后,el-tree会在展开节点时触发load方法回调,将节点的信息传递给回调函数。回调函数需要返回一个Promise对象,在Promise对象resolve()时返回子节点数据并展示。

//开启异步加载

<el-tree

:lazy="true"

:load="loadNode"

:data="treeData">

</el-tree>

//异步加载树形结构

loadNode(node, resolve) {

if (node.level === 0) {

return resolve([{ label: '一级节点1', children: [], isLeaf: false }])

} else if (node.level === 1) {

return resolve([{ label: '二级节点1', children: [], isLeaf: false }])

}

return resolve([])

}

以上代码中,el-tree组件的lazy属性为true时表示开启异步加载功能,开启后需要设置load属性为一个回调函数。当节点展开时,会触发load函数,并将节点信息node和一个resolve函数作为参数传递给回调函数。回调函数需要返回一个Promise对象,在Promise对象resolve()时返回子节点数据并展示。

3. 总结

本文主要介绍了如何使用Vue和Element-UI实现树形结构的数据展示,并讨论了el-tree组件的基本用法和高级用法,包括自定义节点内容、显示图标、多选/单选、可拖拽排序和异步加载节点等。希望本文能够帮助读者更好地掌握Vue和Element-UI框架的使用。