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 相关文章推荐
js中if语句的几种优化代码写法
Mar 12 Javascript
jquery实现滑动图片自己测试的例子
Nov 05 Javascript
javascript闭包传参和事件的循环绑定示例探讨
Apr 17 Javascript
详解Backbone.js框架中的模型Model与其集合collection
May 05 Javascript
jQuery编写设置和获取颜色的插件
Jan 09 Javascript
薪资那么高的Web前端必看书单
Oct 13 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
Nov 22 Javascript
vue使用xe-utils函数库的具体方法
Mar 06 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
Aug 21 jQuery
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
Jun 04 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
Oct 24 Javascript
vue 中的动态传参和query传参操作
Nov 09 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
php求斐波那契数的两种实现方式【递归与递推】
2019/09/09 PHP
基于PHP实现邮箱验证激活过程详解
2020/10/28 PHP
ext 代码生成器
2009/08/07 Javascript
jquery滚动条插件jScrollPane的使用介绍
2013/11/08 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
总结JavaScript设计模式编程中的享元模式使用
2016/05/21 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
AngularJS学习笔记之表单验证功能实例详解
2017/07/06 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
js实现转动骰子模型
2019/10/24 Javascript
javascript使用Blob对象实现的下载文件操作示例
2020/04/18 Javascript
python中精确输出JSON浮点数的方法
2014/04/18 Python
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
Python中List.count()方法的使用教程
2015/05/20 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
Python入门之三角函数tan()函数实例详解
2017/11/08 Python
python使用Flask操作mysql实现登录功能
2018/05/14 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
2019/07/04 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
django的autoreload机制实现
2020/06/03 Python
Python爬虫过程解析之多线程获取小米应用商店数据
2020/11/14 Python
加拿大著名的奢侈品购物网站:SSENSE(支持中文)
2020/06/25 全球购物
工程造价专业大专生求职信
2013/10/06 职场文书
小学生安全演讲稿
2014/04/25 职场文书
六查六看自查报告
2014/10/14 职场文书
家长对孩子的寄语
2015/02/26 职场文书
民政工作个人总结
2015/02/28 职场文书
医院岗前培训心得体会
2016/01/08 职场文书