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 图片轮播(5张图片)
Dec 30 Javascript
js为鼠标添加右击事件防止默认的右击菜单弹出
Jul 29 Javascript
js为数字添加逗号并格式化数字的代码
Aug 23 Javascript
JavaScript加强之自定义callback示例
Sep 21 Javascript
JavaScript实现重置表单(reset)的方法
Apr 02 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
Mar 02 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
Mar 06 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
Apr 18 Javascript
Koa 使用小技巧(小结)
Oct 22 Javascript
浅谈Vue.use到底是什么鬼
Jan 21 Javascript
Vue获取微博授权URL代码实例
Nov 04 Javascript
javascript中闭包closure的深入讲解
Mar 03 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
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
TopList标签和JavaScript结合两例
2007/08/12 Javascript
JavaScript中String和StringBuffer的速度之争
2010/04/01 Javascript
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
通过jquery还原含有rowspan、colspan的table的实现方法
2012/02/10 Javascript
别了 JavaScript中的isXX系列
2012/08/01 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
2016/05/24 Javascript
详解vue.js的事件处理器v-on:click
2017/06/27 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
2019/01/08 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
JavaScript实现简单随机点名器
2019/11/21 Javascript
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
使用Python压缩和解压缩zip文件的教程
2015/05/06 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
django利用request id便于定位及给日志加上request_id
2018/08/26 Python
windows下numpy下载与安装图文教程
2019/04/02 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
2021/01/24 Python
HTML5中的autofocus(自动聚焦)属性介绍
2014/04/23 HTML / CSS
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
美国户外服装和装备购物网站:Outland USA
2020/03/22 全球购物
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
英国珠宝和手表专家:Pleasance & Harper
2020/10/21 全球购物
数据库的约束含义
2012/09/09 面试题
婚纱店策划方案
2014/05/22 职场文书
新闻工作者先进事迹
2014/05/26 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书