vue文件树组件使用详解
作者:shayminsky 发布时间:2024-05-09 09:53:52
标签:vue,文件树,组件
本文实例为大家分享了vue文件树组件的实现方法,供大家参考,具体内容如下
本文主要是分析vue官方仓库里的文件树组件[vue github]
demo可以查看 https://codepen.io/shayminsky21/pen/xXwxgm
首先是html模板:
<li>
<div
//文件夹加粗表示
:class="{bold: isFolder}"
//处理单击事件 打开闭合文件列表
@click="toggle"
//处理双击事件 双击子文件,子文件属性变为文件夹
@dblclick="changeType">
//显示文件名
{{model.name}}
//若是文件夹的话则显示[+]来控制文件夹的开关闭合
<span v-if="isFolder">[{{open ? '-' : '+'}}]</span>
</div>
<ul v-show="open" v-if="isFolder">
//利用v-for显示子文件列表,通过递归使用item组件来完成文件树
<item
class="item"
v-for="model in model.children"
:model="model">
</item>
//增加一个+标记,单击可以增加子文件
<li class="add" @click="addChild">+</li>
</ul>
</li>
接下来是组件部分的源码:
Vue.component('item', {
template: '#item-template',
props: {
model: Object //将文件数据通过props传入
},
data: function () {
return {
open: false //open表示文件夹闭合状态
}
},
computed: {
isFolder: function () {
return this.model.children &&
this.model.children.length
}
}, //计算对象是否有子节点并且子节点数大于0来判断是否是文件夹
methods: {
toggle: function () {
if (this.isFolder) {
this.open = !this.open
}
}, //控制文件夹闭合的方法 单击触发改变open
changeType: function () {
if (!this.isFolder) {
Vue.set(this.model, 'children', [])
this.addChild()
this.open = true
}
}, //双击触发,通过给文件增加子节点来使文件属性变成文件夹
addChild: function () {
this.model.children.push({
name: 'new stuff'
}) //点击文件夹里的+节点触发 为文件夹添加一个新文件
}
}
})
所以设计思路就是通过判断对象是否有子节点来决定是文件夹还是文件,然后通过递归复用<item>组件来展示文件树的效果。
最后是传入组件的数据格式:
var data = {
name: 'My Tree',
children: [
{ name: 'hello' },
{ name: 'wat' },
{
name: 'child folder',
children: [
{
name: 'child folder',
children: [
{ name: 'hello' },
{ name: 'wat' }
]
},
{ name: 'hello' },
{ name: 'wat' },
{
name: 'child folder',
children: [
{ name: 'hello' },
{ name: 'wat' }
]
}
]
}
]
}
大家可以根据这个基本的结构继续拓展文件树的功能和展示效果。
来源:https://blog.csdn.net/shayminsky/article/details/78540100


猜你喜欢
- 本文实例讲述了Python及Django框架生成二维码的方法。分享给大家供大家参考,具体如下:一、包的安装和简单使用1.1 用Python来
- MySQL外键约束的禁用与启用:MySQL外键约束是否启用是通过一个全局变量标示的:FOREIGN_KEY_CHECKS=0; 禁用状态FO
- 写在前面QQ群里偶然看到群友问这个问题, pandas读取大文件时怎么才能获取进度? 我第一反应是: 除非pandas的read_excel
- 一、理解装饰器所有东西都是对象(函数可以当做对象传递)由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。de
- 在Flask开发RESTful后端时,前端请求会遇到跨域的问题。下面是解决方法:使用 flask-cors库可以很容易的解决pip inst
- 在许多人看来,HTML应该是WEB制作所有语言中最简单的语言,因为它不需要编译、封闭等,甚至只需要一个记事本就可以让其在浏览器中呈现出来。所
- 跨域问题一直是前端中常见的问题,每当说到跨域,第一浮现的技术必然就是JSONPJSONP在我的理解,它并不是ajax,它是在文档中插入一个s
- 在利用tensorflow进行文本挖掘工作的时候,经常涉及到维度扩展和压缩工作。比如对文本进行embedding操作完成之后,若要进行卷积操
- Vuex使用单一状态树(一个对象就包含了全部的应用层级状态),它作为唯一数据源存在,每个应用仅仅有一个store实例。单一状态树使得我们能够
- 本文实例讲述了Flask框架 CSRF 保护实现方法。分享给大家供大家参考,具体如下:Flask CSRF 保护为什么需要 CSRF?具体操
- 刚来这个公司,熟悉了环境,老大就开始让我做一个迁移、修改代码的工作,我想说的是,这种工作真没劲~~,看别人的代码、改别人的代码、这里改个变量
- 使用Opencv打开笔记本电脑摄像头报错近期要做一个下位机上发图像数据给上位机的任务,调试时自己写了一个客户端获取笔记本电脑的摄像头视频数据
- 数组的组合主要有:1.水平组合:np.hstack(arr1,arr2) 或 concatenate(arr1,arr2,axis=1)2.
- 最近写了一个网络验证登录的爬虫,需要发布为Rest服务,然后发现Flask是一个很好的Web框架,使用Python语言实现。1. 安装fla
- 导入同级模块导入sys,一定要将当前包所在路径添加进来。import syssys.path.append(r"directory
- 对于PyQT4, PyQT5在一些使用上有着比较明显的变化有很大的变化,让人惊讶是在emit和connect上的一些变化比较有意思,相信也是
- 一、mariadb与mysql简介1、mariadb简介MariaDB由MySQL的创始人Michael Widenius(英语:Micha
- 搭建vue的开发环境:1、必须要安装nodejs2、搭建vue的开发环境 ,安装vue的脚手架工具 官方命令行工具npm install -
- 目录背景方案一:老数据备份方案二:分表方案三:迁移至tidb重点说下同步老数据遇到的坑最终同步脚本方案总结背景由于历史业务数据采用mysql
- 1、终极方法:条件注释<!--[if lte IE 6]> 这段文字仅显示在 IE6及IE6以下版本。 <![endif]