zoukankan      html  css  js  c++  java
  • 不依任何赖第三方,单纯用vue实现Tree 树形控件

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

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

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

    使用方式如下:

    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动画效果

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

  • 相关阅读:
    SQL 的单引号转义字符
    Oracle中row_number()、rank()、dense_rank() 的区别
    Hibernate之mappedBy与@JoinColumn
    spring定时任务的注解实现方式
    springmvc常用注解之@Controller和@RequestMapping
    out.print()与out.write()的区别
    idea 中 找不到程序包 的坑
    Thymeleaf学习
    unknow command 'iscan',使用redis desktop manager 无法读取redis存储的数据
    Struts2框架简单介绍
  • 原文地址:https://www.cnblogs.com/yalong/p/9564698.html
Copyright © 2011-2022 走看看