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学习笔记之 函数篇(一) : 函数声明和函数表达式
Jun 24 Javascript
JavaScript中实现最高效的数组乱序方法
Oct 11 Javascript
JS实现跟随鼠标的链接文字提示框效果
Aug 06 Javascript
JS获取鼠标坐标位置实例分析
Jan 20 Javascript
js控制TR的显示隐藏
Mar 04 Javascript
javascript基本算法汇总
Mar 09 Javascript
Javascript中判断一个值是否为undefined的方法详解
Sep 28 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
May 25 jQuery
Vue0.1的过滤代码如何添加到Vue2.0直接使用
Aug 23 Javascript
浅谈webpack编译vue项目生成的代码探索
Dec 11 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
Aug 09 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
Nov 16 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
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
详解PHP中mb_strpos的使用
2018/02/04 PHP
PHP性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
Aster vs Newbee BO3 第三场2.18
2021/03/10 DOTA
js验证是否为数字的总结
2013/04/14 Javascript
可以浮动某个物体的jquery控件用法实例
2015/07/24 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
JQuery datepicker 用法详解
2015/12/25 Javascript
jQuery获取剪贴板内容的方法
2016/06/16 Javascript
jquery.cookie.js的介绍与使用方法
2017/02/09 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
2017/02/18 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
vue.js 实现评价五角星组件的实例代码
2018/08/13 Javascript
layUI实现前端分页和后端分页
2019/07/27 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
python 布尔操作实现代码
2013/03/23 Python
Python 错误和异常小结
2013/10/09 Python
使用python装饰器验证配置文件示例
2014/02/24 Python
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
django+xadmin+djcelery实现后台管理定时任务
2018/08/14 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
2018/11/30 Python
Python利用字典破解WIFI密码的方法
2019/02/27 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
html5 input输入实时检测以及延时优化
2018/07/18 HTML / CSS
初三物理教学反思
2014/01/21 职场文书
利群广告词
2014/03/20 职场文书
竞聘书怎么写,如何写?
2014/03/31 职场文书
药品营销专业毕业生自荐信
2014/07/02 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript
JavaScript实现九宫格拖拽效果
2022/06/28 Javascript