这篇文章主要为大家详细介绍了vue文件树组件的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了vue文件树组件的实现方法,供大家参考,具体内容如下
本文主要是分析vue官方仓库里的文件树组件[vue github]
首先是html模板:
<li>
<p
//文件夹加粗表示
:class="{bold: isfolder}"
//处理单击事件 打开闭合文件列表
@click="toggle"
//处理双击事件 双击子文件,子文件属性变为文件夹
@dblclick="changetype">
//显示文件名
{{model.name}}
//若是文件夹的话则显示[+]来控制文件夹的开关闭合
<span v-if="isfolder">[{{open ? '-' : '+'}}]</span>
</p>
<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' }
]
}
]
}
]
}
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
原生nodejs使用websocket代码分享
详解nodejs通过响应回写的方式渲染页面资源
vue下拉列表功能实例代码
以上就是vue文件树组件使用详解的详细内容。