七 VUE 实现 Studio 管理后台:树形结构,文件树

本次介绍的内容,稍稍复杂了一点,用 VUE 实现树形结构 。目前这个属性结构还没有编辑功能,仅仅是展示 。明天再开一篇文章,介绍如何增加编辑功能,标题都想好了 。先看今天的展示效果:
构建树必须用到递归,使用 slot 这种直观明了的方式,已经行不通了 。只能通过属性参数,传递一个树形的数据结构给组件,传入的数据结构大致是这个样子:
[{title:‘页面 ’selected:false,opened:false,isFolder:true,children:[{title:'index.html',selected:false,opened:false,icon:"far fa-file-code",},{title:'product.html',selected:false,opened:false,icon:"far fa-file-code",},],},{title:‘样式’selected:false,opened:false,isFolder:true,children:[{title:'style.css',selected:false,opened:false,icon:"far fa-file-code",},],},]
每个节点通过嵌套子节点 。需要注意的是,我们希望这颗树是可以被编辑的,可以增加、删除、编辑其节点,所以需要数据的双向绑定,不能通过普通属性 props 传递给组件,而是通过 v-model 传递 。
【七VUE 实现 Studio 管理后台:树形结构,文件树】 项目中,只有两个地方用到了树形结构,要制作的组件满足这两处需求就可以,因为不是构建一个通用类库,就可以相对简单些 。这两处地方一处用于展示并编辑文件目录结构,一处是节点树,纯显示,没有编辑功能 。文件树只有叶子节点可以被选中,节点树所有节点都可以被选中 。都是单选,无复选需求 。
给这个控件取个大气的名字,叫吧,先看如何使用。
第一处调用:

七  VUE 实现 Studio 管理后台:树形结构,文件树

文章插图

第二处调用:

通过 v-model 传递树形数据结构,是节点展开时的图标,是节点闭合时的图标,是没有子节点时的图标 。这些图标如果不设置,会有缺省值,是文件夹跟文件的样子 。为了增加可扩展性,树形数据结构也可以放置图标,数据结构里的图标设置优先级高,可以覆盖控件的设置 。明白个原理,想做成什么样子,看自己的项目需求 。参数是指含有子节点的节点(比如文件夹)是否可以被选中 。
在 src 目录下新建 tree 目录,放两个文件:
是树形控件,是树形控件内部的节点,名字稍微优点绕,但是是我喜欢的命名方式 。
.vue 的代码(省略 CSS):