vue文件树组件使用详解


Posted in Javascript onMarch 29, 2018

本文实例为大家分享了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' }
   ]
  }
  ]
 }
 ]
}

大家可以根据这个基本的结构继续拓展文件树的功能和展示效果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript操作文本框readOnly
May 15 Javascript
JavaScript 对象、函数和继承
Jul 07 Javascript
JavaScript学习笔记(二) js对象
Oct 25 Javascript
JavaScript面向对象(极简主义法minimalist approach)
Jul 17 Javascript
JS的get和set使用示例
Feb 20 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
May 18 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
Aug 20 Javascript
Highcharts入门之基本属性
Aug 02 Javascript
自制简易打赏功能的实例
Sep 02 Javascript
vuejs实现递归树型菜单组件
Jan 13 Javascript
jQuery实现table表格信息的展开和缩小功能示例
Jul 21 jQuery
Vue从TodoList中学父子组件通信
Feb 05 Javascript
vue全局组件与局部组件使用方法详解
Mar 29 #Javascript
javascript实现文件拖拽事件
Mar 29 #Javascript
vue 父组件调用子组件方法及事件
Mar 29 #Javascript
vue.js element-ui tree树形控件改iview的方法
Mar 29 #Javascript
Vue 源码分析之 Observer实现过程
Mar 29 #Javascript
vue 实现全选全不选的示例代码
Mar 29 #Javascript
Angular开发实践之服务端渲染
Mar 29 #Javascript
You might like
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
杏林同学录(七)
2006/10/09 PHP
解析PHP跨站刷票的实现代码
2013/06/18 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
PHP里的单例类写法实例
2015/06/25 PHP
php实现数组中出现次数超过一半的数字的统计方法
2018/10/14 PHP
php多进程应用场景实例详解
2019/07/22 PHP
IE与firefox下Dhtml的一些区别小结
2009/12/02 Javascript
完美解决AJAX跨域问题
2013/11/01 Javascript
jQuery显示和隐藏 常用的状态判断方法
2015/01/29 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
jQuery编写设置和获取颜色的插件
2017/01/09 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
ajax+node+request爬取网络图片的实例(宅男福利)
2017/08/28 Javascript
JS实现按钮添加背景音乐示例代码
2017/10/17 Javascript
微信小程序上传图片实例
2018/05/28 Javascript
ES6的异步终极解决方案分享
2019/07/11 Javascript
Vue.js中使用Vuex实现组件数据共享案例
2020/07/31 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
讲解Python中fileno()方法的使用
2015/05/24 Python
python url 参数修改方法
2018/12/26 Python
python 反编译exe文件为py文件的实例代码
2019/06/27 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
2019/08/24 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
python 安装impala包步骤
2020/03/28 Python
Python判断三段线能否构成三角形的代码
2020/04/12 Python
Python内存映射文件读写方式
2020/04/24 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
详解python tkinter 图片插入问题
2020/09/03 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
青年文明号事迹材料
2014/01/18 职场文书
《他得的红圈圈最多》教学反思
2014/04/24 职场文书
就业推荐表自我评价范文
2015/03/02 职场文书
小平您好观后感
2015/06/09 职场文书
nginx里的rewrite跳转的实现
2021/03/31 Servers