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动态在form上插入enctype=multipart/form-data的问题
May 24 Javascript
原生js 秒表实现代码
Jul 24 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
Jun 06 Javascript
jquery实现网页查找功能示例分享
Feb 12 Javascript
jquery衣服颜色选取插件效果代码分享
Aug 28 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
Feb 18 Javascript
weui框架实现上传、预览和删除图片功能代码
Aug 24 Javascript
JavaScript模板引擎实现原理实例详解
Dec 14 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
Mar 12 Javascript
Vue渲染过程浅析
Mar 14 Javascript
vue组件中watch props根据v-if动态判断并挂载DOM的问题
May 12 Javascript
使用Vue.observable()进行状态管理的实例代码详解
May 26 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
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
2013/09/23 PHP
php+mysqli事务控制实现银行转账实例
2015/01/29 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
2015/03/25 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
php源码的安装方法和实例
2019/09/26 PHP
javascript入门·对象属性方法大总结
2007/10/01 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
2012/12/24 Javascript
纯js写的分页表格数据为json串
2014/02/18 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
JS实现往下不断流动网页背景的方法
2015/02/27 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
2016/05/09 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
cropper js基于vue的图片裁剪上传功能的实现代码
2018/03/01 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
使用python统计文件行数示例分享
2014/02/21 Python
python快速查找算法应用实例
2014/09/26 Python
Python中处理unchecked未捕获异常实例
2015/01/17 Python
用Python中的字典来处理索引统计的方法
2015/05/05 Python
Python队列RabbitMQ 使用方法实例记录
2019/08/05 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
印尼网上商店:Alfacart.com
2019/03/11 全球购物
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
教师党员岗位承诺书
2014/05/29 职场文书
第一批党的群众路线教育实践活动总结报告
2014/07/03 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2015年财务试用期工作总结
2014/12/24 职场文书
python如何在word中存储本地图片
2021/04/07 Python
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript
Anaconda配置各版本Pytorch的实现
2021/08/07 Python
Spring Cloud OpenFeign模版化客户端
2022/06/25 Java/Android
修改Nginx配置返回指定content-type的方法
2022/09/23 Servers
Li list-style-image 图片垂直居中实现方法
2023/05/21 HTML / CSS