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 相关文章推荐
Jquery:ajax实现翻页无刷新功能代码
Aug 05 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
May 04 Javascript
jquery中EasyUI实现同步树
Mar 01 Javascript
js调用刷新界面的几种方式
May 03 Javascript
Angular2入门教程之模块和组件详解
May 28 Javascript
JavaScript原型对象原理与应用分析
Dec 27 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
Apr 11 Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
Jun 27 Javascript
基于layui内置模块(element常用元素的操作)
Sep 20 Javascript
vue实现点击按钮下载文件功能
Oct 11 Javascript
node.js事件轮询机制原理知识点
Dec 22 Javascript
jQuery实现简单三级联动效果
Sep 05 jQuery
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
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
如何让CI框架支持service层
2014/10/29 PHP
php面向对象值单例模式
2016/05/03 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
laravel dingo API返回自定义错误信息的实例
2019/09/29 PHP
破除一些网站复制、右键限制
2006/11/04 Javascript
解决 firefox 不支持 document.all的方法
2007/03/12 Javascript
Javascript下的keyCode键码值表
2007/04/10 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
js a标签点击事件
2017/03/30 Javascript
vue.js利用defineProperty实现数据的双向绑定
2017/04/28 Javascript
利用ECharts.js画K线图的方法示例
2018/01/10 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
详解vue实现坐标拾取器功能示例
2020/11/18 Vue.js
Python解析最简单的验证码
2016/01/07 Python
Python如何实现文本转语音
2016/08/08 Python
利用ctypes提高Python的执行速度
2016/09/09 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
python logging模块的使用
2020/09/07 Python
html5 touch事件实现触屏页面上下滑动(一)
2016/03/10 HTML / CSS
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
Ruby如何实现动态方法调用
2012/11/18 面试题
应届大专毕业生个人自荐信
2013/09/22 职场文书
电大物流学生的自我评价
2013/10/25 职场文书
写给妈妈的道歉信
2014/01/11 职场文书
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
高职教师先进事迹材料
2014/08/24 职场文书
全国爱牙日活动总结
2015/02/05 职场文书
财务稽核岗位职责
2015/04/13 职场文书
小学班主任研修日志
2015/11/13 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书
送给小学生的暑假礼物!小学生必背99首古诗
2019/07/02 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery