不依任何赖第三方,单纯用vue实现Tree 树形控件的案例


Posted in Javascript onSeptember 21, 2020

这几天接到一个需求,里面有需要做一个属性组件,找的第三方的,但是不能完全满足我的需求,有这时间,我就自己做个小轮子吧。

先看效果图(红点之前用的字体图标,是个对号,这里为了方便,用圆圈代替了选中状态,所以不是太好看,需要的自行修改就好)

不依任何赖第三方,单纯用vue实现Tree 树形控件的案例

我直接用的vue-cli搭建的项目,代码目录如下:

不依任何赖第三方,单纯用vue实现Tree 树形控件的案例

使用方式如下:

不依任何赖第三方,单纯用vue实现Tree 树形控件的案例

treeData的格式如下:

treeData: [
    {open: false, name: '1', level: 0, checked: true},
    {
     open: false, // opend 是否展开子集
     name: '2',
     level: 0, //level代表第几层
     checked: false, // checked 代表是否选中状态
     children: [
      {
       open: false,
       name: '3',
       level: 1,
       checked: false,
       children: [
        {open: false, name: '4', level: 2, checked: false},
        {
         open: false,
         name: '5',
         level: 2,
         checked: false
        }
       ]
      }
     ]
    }
   ],

这个组件设计到几个关键点如下:

1. 深度watch

由于数据是个深层的对象,所以单纯的watch,检测不到数据的变化,所以使用deep,代码如下:

watch: {
  // 深度监听 treeDate的数据变化 用 deep
  treeData: {
   handler: function (newVal, oldVal) {
    this.calculateSelectFormResult()
   },
   deep: true
  }
 }

2.递归

数据的结果是用递归遍历出来的,

calculateSelectFormResult: function () {
   var arr = []
   function f (obj) {
    for (var i in obj) {
     if (obj[i].checked) {
      // console.log(2)
      arr.push(obj[i].name)
     }
     if (obj[i].children) {
      if (obj[i].children.length !== 0) {
       f(obj[i].children)
      }
     }
    }
   }
   f(this.treeData)
   this.selectFormResult = arr
   console.log(this.selectFormResult)
  }

3.模拟slideDown slideUp动画效果

不依任何赖第三方,单纯用vue实现Tree 树形控件的案例

项目完整代码地址: https://github.com/YalongYan/tree

补充知识:vue实现elment 可编辑树形控件

功能实现程度:

elment树形控件,已具备新增、删除功能,此项目,添加编辑功能,新增时可对节点命名,也可直接给已添加的节点修改名字

先看效果:

不依任何赖第三方,单纯用vue实现Tree 树形控件的案例

控件有所改动,如加输入框,输入关键字过滤,节点图标变换。。。。参看elment Tree树形控件文档即可

项目下载

项目地址:https://github.com/midnightvisitor/vue-el-tree.git

如需要,请自行下载

以上这篇不依任何赖第三方,单纯用vue实现Tree 树形控件的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS获取IUSR_机器名和IWAM_机器名帐号的密码
Dec 06 Javascript
javascript阻止scroll事件多次执行的思路及实现
Nov 08 Javascript
bootstrap data与jquery .data
Jul 07 Javascript
javascript实现禁止右键和F12查看源代码
Dec 26 Javascript
JS实现三个层重叠点击互相切换的方法
Oct 06 Javascript
JS实现日期时间动态显示的方法
Dec 07 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
Dec 12 Javascript
bootstrap组件之按钮式下拉菜单小结
Jan 19 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
Sep 19 jQuery
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
Aug 27 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
Feb 11 Javascript
html5调用摄像头截图功能
Jan 18 Javascript
微信小程序实现转盘抽奖
Sep 21 #Javascript
结合axios对项目中的api请求进行封装操作
Sep 21 #Javascript
微信小程序实现打卡签到页面
Sep 21 #Javascript
微信小程序实现签到弹窗动画
Sep 21 #Javascript
解决vue prop传值default属性如何使用,为何不生效的问题
Sep 21 #Javascript
微信小程序实现日历签到
Sep 21 #Javascript
Vue切换Tab动态渲染组件的操作
Sep 21 #Javascript
You might like
Smarty中的注释和截断功能介绍
2015/04/09 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
2016/01/07 PHP
Laravel执行migrate命令提示:No such file or directory的解决方法
2016/03/16 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
让ie6也支持websocket采用flash封装实现
2013/02/18 Javascript
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
详解Vue 实例中的生命周期钩子
2017/03/21 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
在Vue中获取组件声明时的name属性方法
2018/09/12 Javascript
js实现简单点赞操作
2020/03/17 Javascript
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
[45:16]完美世界DOTA2联赛循环赛 IO vs FTD BO2第二场 11.05
2020/11/06 DOTA
Python中用于转换字母为小写的lower()方法使用简介
2015/05/19 Python
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
python解析基于xml格式的日志文件
2017/02/25 Python
Python切片工具pillow用法示例
2018/03/30 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
2018/10/14 Python
使用Python创建简单的HTTP服务器的方法步骤
2019/04/26 Python
django中media媒体路径设置的步骤
2019/11/15 Python
python else语句在循环中的运用详解
2020/07/06 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
Django xadmin安装及使用详解
2020/10/26 Python
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
社会实践的活动方案
2014/08/22 职场文书
党支部遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
篮球赛新闻稿
2015/07/17 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书
CSS3实现的文字弹出特效
2021/04/16 HTML / CSS
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python
Golang 入门 之url 包
2022/05/04 Golang