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 简单图片导航插件jquery.imgNav.js
Mar 17 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
Nov 07 Javascript
jQuery aminate方法定位到页面具体位置
Dec 26 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
May 05 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
Jun 18 Javascript
JS折半插入排序算法实例
Dec 02 Javascript
JavaScript操作 url 中 search 部分方法函数
Jun 15 Javascript
BootStrap无限级分类(无限极分类封装版)
Aug 26 Javascript
BootStrap使用file-input插件上传图片的方法
Sep 05 Javascript
深入理解jQuery()方法的构建原理
Dec 05 Javascript
详解Vue使用命令行搭建单页面应用
May 24 Javascript
Easyui在treegrid添加控件的实现方法
Jun 23 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公司全球首推PHP认证
2006/10/09 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
2013/06/17 PHP
PHP MSSQL 分页实例
2016/04/13 PHP
PHP命名空间namespace及use的简单用法分析
2018/08/03 PHP
javascript中this做事件参数相关问题解答
2013/03/17 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
2013/03/20 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
2014/01/12 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
JS中常用的正则表达式
2016/09/29 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
jquery 手势密码插件
2017/03/17 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
Javascript的console['']常用输入方法汇总
2018/04/26 Javascript
JS实现动态生成html table表格的方法分析
2018/07/11 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
JS JQuery获取data-*属性值方法解析
2020/09/01 jQuery
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
详解python的四种内置数据结构
2019/03/19 Python
Django的models模型的具体使用
2019/07/15 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
Python hashlib模块的使用示例
2020/10/09 Python
Python descriptor(描述符)的实现
2020/11/15 Python
介绍一下grep命令的使用
2012/06/28 面试题
高中毕业自我鉴定范文
2013/10/02 职场文书
助人为乐表扬信范文
2014/01/14 职场文书
九年级语文教学反思
2014/02/04 职场文书
国贸专业的职业规划书
2014/03/15 职场文书
学习“七一”讲话精神体会
2014/07/08 职场文书
九一八事变演讲稿
2014/09/05 职场文书
小学五年级语文上册教学计划
2015/01/22 职场文书
党员身份证明材料
2015/06/19 职场文书
小学教育见习总结
2015/06/23 职场文书
PHP策略模式写法
2021/04/01 PHP
matplotlib之pyplot模块实现添加子图subplot的使用
2021/04/25 Python