不依任何赖第三方,单纯用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 相关文章推荐
JavaScript 应用技巧集合[推荐]
Aug 30 Javascript
jQuery点击tr实现checkbox选中的方法
Mar 19 Javascript
js特效,页面下雪的小例子
Jun 17 Javascript
使用js简单实现了tree树菜单
Nov 20 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
Jun 05 Javascript
vue数据双向绑定原理解析(get & set)
Mar 08 Javascript
layui实现动态和静态分页
Apr 28 Javascript
关于vue编译版本引入的问题的解决
Sep 17 Javascript
vue解决一个方法同时发送多个请求的问题
Sep 25 Javascript
如何能分清npm cnpm npx nvm
Jan 17 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
May 09 Javascript
详解Vue3中对VDOM的改进
Apr 23 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
ThinkPHP模版引擎之变量输出详解
2014/12/05 PHP
摘自启点的main.js
2008/04/20 Javascript
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
IE6,IE7下js动态加载图片不显示错误
2010/07/17 Javascript
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
JS弹出可拖拽可关闭的div层完整实例
2015/02/13 Javascript
javascript动态获取登录时间和在线时长
2016/02/25 Javascript
谈一谈jQuery核心架构设计
2016/03/28 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
2019/09/25 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
2020/06/02 jQuery
Python生成pdf文件的方法
2014/08/04 Python
python3人脸识别的两种方法
2019/04/25 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
利用Python实现Excel的文件间的数据匹配功能
2020/06/16 Python
python如何求圆的面积
2020/07/01 Python
台湾百利市购物中心:e-Payless
2017/08/16 全球购物
The North Face北面美国官网:美国著名户外品牌
2018/09/15 全球购物
Blank NYC官网:夹克、牛仔裤等
2020/12/16 全球购物
当当网软件测试笔试题
2015/11/24 面试题
2013年保送生自荐信格式
2013/11/20 职场文书
四年的个人工作自我评价
2013/12/10 职场文书
我的网上商城创业计划书
2013/12/26 职场文书
家长给孩子的表扬信
2014/01/17 职场文书
个性发展自我评价
2014/02/11 职场文书
美术指导助理求职信
2014/04/20 职场文书
环卫处个人工作总结
2015/03/04 职场文书
2015年消防工作总结
2015/04/24 职场文书
送达通知书
2015/04/25 职场文书
六一儿童节园长致辞
2015/07/31 职场文书
自信主题班会
2015/08/14 职场文书
幼儿园国培研修日志
2015/11/13 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
学校团代会开幕词
2016/03/04 职场文书