不依任何赖第三方,单纯用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 相关文章推荐
jquery 日期控件datepicker属性详细解析
Nov 08 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
Apr 23 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
May 09 Javascript
jQuery+PHP星级评分实现方法
Oct 02 Javascript
简单封装js的dom查询实例代码
Jul 08 Javascript
JavaScript实现图片轮播组件代码示例
Nov 22 Javascript
vue2.0全局组件之pdf详解
Jun 26 Javascript
layui获取多选框中的值方法
Aug 15 Javascript
JavaScript中引用vs复制示例详析
Dec 06 Javascript
vue3.0中使用postcss-pxtorem的具体方法
Nov 20 Javascript
javascript实现滚动条效果
Mar 24 Javascript
vue-simple-uploader上传成功之后的response获取代码
Sep 07 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
php面向对象全攻略 (三)特殊的引用“$this”的使用
2009/09/30 PHP
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
PHP错误和异长常处理总结
2014/03/06 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
PHP简单获取多个checkbox值的方法
2016/06/13 PHP
javascript据option的value值快速设定初始的selected选项
2007/08/13 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
2015/08/31 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
pygame游戏之旅 添加键盘按键的方法
2018/11/20 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
Python读取csv文件分隔符设置方法
2019/01/14 Python
Python 获取 datax 执行结果保存到数据库的方法
2019/07/11 Python
python 控制台单行刷新,多行刷新实例
2020/02/19 Python
HTML5中meta属性的使用方法
2016/02/29 HTML / CSS
详解android与HTML混合开发总结
2018/06/06 HTML / CSS
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
介绍一下如何优化MySql
2016/12/20 面试题
秋季开学典礼主持词
2014/03/19 职场文书
高三学生评语大全
2014/04/25 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
2016个人廉洁自律承诺书
2016/03/25 职场文书
导游词之香港-太平山顶
2019/10/18 职场文书
Python中else的三种使用场景
2021/06/16 Python
Python中文纠错的简单实现
2021/07/07 Python