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 相关文章推荐
List all the Databases on a SQL Server
Jun 21 Javascript
将CKfinder整合进CKEditor3.0的新方法
Jan 10 Javascript
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
Jun 28 Javascript
JS对select控件option选项的增删改查示例代码
Oct 21 Javascript
有关json_decode乱码及NULL的问题
Oct 13 Javascript
JavaScript实现页面跳转的几种常用方式
Nov 28 Javascript
jQuery中cookie插件用法实例分析
Dec 04 Javascript
jQuery插件扩展extend的简单实现原理
Jun 24 Javascript
微信小程序 Tab页切换更新数据
Jan 05 Javascript
详解JS中的立即执行函数
Feb 24 Javascript
javascript中this的用法实践分析
Jul 29 Javascript
JS实现移动端在线签协议功能
Aug 22 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 文件扩展名 获取函数
2009/06/03 PHP
Php无限级栏目分类读取的实现代码
2014/02/19 PHP
PHP处理会话函数大总结
2015/08/05 PHP
PHP将字符串首字母大小写转换的实例
2017/01/21 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
Jquery中Event对象属性小结
2015/02/27 Javascript
AngularJS基础 ng-selected 指令简单示例
2016/08/03 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
2018/10/12 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例
2020/02/11 Javascript
flexible.js实现移动端rem适配方案
2020/04/07 Javascript
JS实现横向跑马灯效果代码
2020/04/20 Javascript
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
Python的条件表达式和lambda表达式实例
2019/01/31 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
2019/02/17 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
django组合搜索实现过程详解(附代码)
2019/08/06 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
2020/02/25 Python
python安装cx_Oracle和wxPython的方法
2020/09/14 Python
python3处理word文档实例分析
2020/12/01 Python
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
中国领先的汽车保养服务平台:途虎养车
2019/10/18 全球购物
大学生毕业自我鉴定范文
2013/11/03 职场文书
祖国在我心中演讲稿
2014/01/15 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
供用电专业求职信
2014/07/07 职场文书
学校领导班子对照检查材料
2014/08/28 职场文书
出售房屋协议书范本
2014/10/06 职场文书
单位病假条范文
2015/08/17 职场文书
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL
Python机器学习之决策树和随机森林
2021/07/15 Javascript