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调用Activex控件的事件的实现方法
Apr 11 Javascript
面向对象的Javascript之二(接口实现介绍)
Jan 27 Javascript
使用jquery的ajax需要注意的地方dataType的设置
Aug 12 Javascript
jQuery中:first选择器用法实例
Dec 30 Javascript
深入浅析JavaScript中数据共享和数据传递
Apr 25 Javascript
jQuery四种选择器使用及示例
Jun 05 Javascript
js闭包用法实例详解
Dec 13 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
Mar 30 Javascript
JS闭包可被利用的常见场景小结
Apr 09 Javascript
Vue起步(无cli)的啊教程详解
Apr 11 Javascript
详解ES6 扩展运算符的使用与注意事项
Nov 12 Javascript
uni-app 微信小程序授权登录的实现步骤
Feb 18 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生成静态页
2006/11/25 PHP
php实现用户在线时间统计详解
2011/10/08 PHP
javascript整除实现代码
2010/11/23 Javascript
JS字符串累加Array不一定比字符串累加快(根据电脑配置)
2012/05/14 Javascript
Javascript处理DOM元素事件实现代码
2012/05/23 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
2013/12/14 Javascript
js选项卡的实现方法
2015/02/09 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
JQuery用户名校验的具体实现
2016/03/18 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
JSON字符串和对象相互转换实例分析
2016/06/16 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
Angular使用ng-messages与PHP进行表单数据验证
2016/12/28 Javascript
js 作用域和变量详解
2017/02/16 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
[25:59]Newbee vs TNC 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
[原创]python爬虫(入门教程、视频教程)
2018/01/08 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
Python中的类与类型示例详解
2019/07/10 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
python super函数使用方法详解
2020/02/14 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
俄罗斯香水在线商店:AromaCode
2019/12/04 全球购物
十佳美德少年事迹材料
2014/02/05 职场文书
公司酒会主持词
2015/07/02 职场文书
公司联欢会主持词
2015/07/04 职场文书
maven依赖的version声明控制方式
2022/01/18 Java/Android