• 技术文章 >web前端 >js教程

    vue使用文件树案例

    php中世界最好的语言php中世界最好的语言2018-04-20 16:07:22原创1156
    这次给大家带来vue使用文件树案例,vue使用文件树案例的注意事项有哪些,下面就是实战案例,一起来看一下。

    本文主要是分析vue官方仓库里的文件树组件[vue github]

    demo可以查看 https://codepen.io/shayminsky21/pen/xXwxgm

    首先是html模板:

    <li>
      <p
       //文件夹加粗表示
       :class="{bold: isFolder}" 
       //处理单击事件 打开闭合文件列表            
       @click="toggle"  
       //处理双击事件 双击子文件,子文件属性变为文件夹               
       @dblclick="changeType">  
       //显示文件名      
       {{model.name}}
      //若是文件夹的话则显示[+]来控制文件夹的开关闭合
       <span v-if="isFolder">[{{open ? '-' : '+'}}]</span>
      </p>
      <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' }
       ]
      }
      ]
     }
     ]
    }

    大家可以根据这个基本的结构继续拓展文件树的功能和展示效果。

    相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

    推荐阅读:

    JS EventEmitter使用详解

    操作Vue导出excel表格

    以上就是vue使用文件树案例的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:案例 文件 使用
    上一篇:diff算法使用详解 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 浅析Angular变更检测中的DOM更新机制• 一文带你深入了解Node中的Buffer类• Angular开发问题记录:组件拿不到@Input输入属性• 聊聊基于Node实现单点登录(SSO)的方法• 深入了解Angular(新手入门指南)
    1/1

    PHP中文网