不依任何赖第三方,单纯用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 相关文章推荐
HTA版JSMin(省略修饰语若干)基于javascript语言编写
Dec 24 Javascript
JQuery实现左右滚动菜单特效
Sep 28 Javascript
Treegrid的动态加载实例代码
Apr 29 Javascript
Vue开发过程中遇到的疑惑知识点总结
Jan 20 Javascript
canvas 实现中国象棋
Feb 17 Javascript
js实现放大镜特效
May 18 Javascript
前端把html表格生成为excel表格的实例
Sep 19 Javascript
从setTimeout看js函数执行过程
Dec 19 Javascript
vue生成文件本地打开查看效果的实例
Sep 06 Javascript
JQuery插件tablesorter表格排序实现过程解析
May 28 jQuery
JavaScript缓动动画函数的封装方法
Nov 25 Javascript
vue实现表格合并功能
Dec 01 Vue.js
微信小程序实现转盘抽奖
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类继承 extends使用介绍
2014/01/14 PHP
php 判断服务器操作系统的类型
2014/02/17 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
2014/04/24 PHP
使用PHP函数scandir排除特定目录
2014/06/12 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
2016/11/25 PHP
php提交表单时保留多个空格及换行的文本样式的方法
2017/06/20 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
php删除二维数组中的重复值方法
2018/03/12 PHP
音乐播放用的的几个函数
2006/09/07 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
javascrip关于继承的小例子
2013/05/10 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
基于Vue生产环境部署详解
2017/09/15 Javascript
基于vue,vue-router, vuex及addRoutes进行权限控制问题
2018/05/02 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
2018/09/25 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
2019/09/04 Javascript
javascript/jquery实现点击触发事件的方法分析
2019/11/11 jQuery
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
Python实现基于权重的随机数2种方法
2015/04/28 Python
Pycharm小白级简单使用教程
2020/01/08 Python
ansible动态Inventory主机清单配置遇到的坑
2020/01/19 Python
python+opencv3生成一个自定义纯色图教程
2020/02/19 Python
TensorFLow 数学运算的示例代码
2020/04/21 Python
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
家长会演讲稿范文
2014/01/10 职场文书
交通事故检查书范文
2014/01/30 职场文书
应届毕业生自荐信
2014/05/28 职场文书
2015年党支部公开承诺书
2015/01/22 职场文书
初中教师个人总结
2015/02/10 职场文书
教师年度个人总结
2015/02/11 职场文书
同学聚会致辞集锦
2015/07/28 职场文书
python中os.path.join()函数实例用法
2021/05/26 Python
python 远程执行命令的详细代码
2022/02/15 Python