vue,基于element的tree组件封装

摘要:
封装组件代码//组件:树/*参数描述-属性:1.treeData:显示数据(数组)2.treeEmptyText:内容为空时显示文本(字符串)3.treeNodeKey:用作每个树节点唯一标识符的属性。整个树应该是唯一的(字符串)4.treeRenderAfterExpand:是否在第一次展开树节点后渲染其子节点(布尔值)5.treeHighlightCur

封装组件代码

// 组件:树
/*
参数说明-属性:
1.treeData:展示数据(array)
2.treeEmptyText:内容为空的时候展示的文本(String)
3.treeNodeKey:每个树节点用来作为唯一标识的属性,整棵树应该是唯一的(String)
4.treeRenderAfterExpand:是否在第一次展开某个树节点后才渲染其子节点(boolean)
5.treeHighlightCurrent:是否高亮当前选中节点,默认值是 false(boolean)
6.treeDefaultExpandAll:是否默认展开所有节点(boolean)
7.treeExpandOnClickNode:是否在点击节点的时候展开或者收缩节点, 默认值为 true,如果为 false,则只有点箭头图标的时候才会展开或者收缩节点(boolean)
8.treeCheckOnClickNode:是否在点击节点的时候选中节点,默认值为 false,即只有在点击复选框时才会选中节点。(boolean)
9.treeDefaultExpandedKeys:默认展开的节点的 key 的数组(array)
10.treeShowCheckbox:节点是否可被选择(boolean)
11.treeCheckStrictly:在显示复选框的情况下,是否严格的遵循父子不互相关联的做法,默认为 false(boolean)
12.treeDefaultCheckedKeys:默认勾选的节点的 key 的数组(array)
13.treeAccordion:是否每次只打开一个同级树节点展开(boolean)
14.treeIndent:相邻级节点间的水平缩进,单位为像素(number)
15.treeIconClass:自定义树节点的图标(string)
16.treeFilterText:对树节点进行筛选操作(string)

17.treeNodeClickFunName:节点点击回调函数的函数名(示例:@trNodeClick="treeNodeClick" treeNodeClickFunName="trNodeClick")
  返回参数:s:有复选框时,选中节点的信息,
            a:点击节点在data中对应的对象,
            b:节点对应的 Node
18.treeCheckChangeFunName:节点选中状态发生变化时的回调函数的函数名(示例:@trCheckChange="treeCheckChange" treeCheckChangeFunName="trCheckChange")
  返回参数:a:传递给 data 属性的数组中该节点所对应的对象,
            b:节点本身是否被选中,
            c:节点的子树中是否有被选中的节点
            说明:现在返回参数报错(TypeError: Cannot read property 'toLowerCase' of undefined)不知道啥原因,暂时不返回
19.treeCheckFunName:当复选框被点击的时候触发回调函数的函数名(示例:@trCheck="treeCheck" treeCheckFunName="trCheck")
  返回参数:a:传递给 data 属性的数组中该节点所对应的对象
            b:树目前的选中状态对象,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性

参数说明-事件:
1.node-click:节点被点击时的回调(共三个参数,依次为:传递给 data 属性的数组中该节点所对应的对象、节点对应的 Node、节点组件本身。)
2.check-change:节点选中状态发生变化时的回调(共三个参数,依次为:传递给 data 属性的数组中该节点所对应的对象、节点本身是否被选中、节点的子树中是否有被选中的节点)
3.check:当复选框被点击的时候触发(共两个参数,依次为:传递给 data 属性的数组中该节点所对应的对象、树目前的选中状态对象,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性)
*/
<template>
  <div>
    <el-tree :data="treeData" :empty-text="treeEmptyText" :node-key="treeNodeKey" :render-after-expand="treeRenderAfterExpand" :highlight-current="treeHighlightCurrent" :default-expand-all="treeDefaultExpandAll" :expand-on-click-node="treeExpandOnClickNode" :check-on-click-node="treeCheckOnClickNode" :default-expanded-keys="treeDefaultExpandedKeys" :show-checkbox="treeShowCheckbox" :check-strictly="treeCheckStrictly" :default-checked-keys="treeDefaultCheckedKeys" :accordion="treeAccordion" :indent="treeIndent" :icon-  :filter-node-method="filterNode" @node-click="nodeClick" @check-change="checkChange" @check="check" :props="defaultProps" ref="modelTree">
    </el-tree>
  </div>
</template>

<script>
export default {
  props: {
    treeData: {
      type: Array
    },
    treeEmptyText: {
      type: String,
      default: '暂无数据'
    },
    treeNodeKey: {
      type: String
    },
    treeRenderAfterExpand: {
      type: Boolean,
      default: true
    },
    treeHighlightCurrent: {
      type: Boolean,
      default: false
    },
    treeDefaultExpandAll: {
      type: Boolean,
      default: false
    },
    treeExpandOnClickNode: {
      type: Boolean,
      default: true
    },
    treeCheckOnClickNode: {
      type: Boolean,
      default: false
    },
    treeDefaultExpandedKeys: {
      type: Array
    },
    treeShowCheckbox: {
      type: Boolean,
      default: false
    },
    treeCheckStrictly: {
      type: Boolean,
      default: false
    },
    treeDefaultCheckedKeys: {
      type: Array
    },
    treeAccordion: {
      type: Boolean,
      default: false
    },
    treeIndent: {
      type: Number,
      default: 16
    },
    treeIconClass: {
      type: String
    },
    treeFilterText: {
      type: String
    },
    treeNodeClickFunName: {
      type: String
    },
    treeCheckChangeFunName: {
      type: String
    },
    treeCheckFunName: {
      type: String
    }
  },
  data () {
    return {
      defaultProps: {
        children: 'children',
        label: 'label'
      }
    }
  },
  methods: {
    filterNode (value, data) {
      if (!value) return true
      return data.label.indexOf(value) !== -1
    },
    nodeClick (a, b, c) {
      if (!this.treeNodeClickFunName || this.treeNodeClickFunName === '') return
      let s = this.$refs.modelTree.getCheckedNodes()
      this.$emit(this.treeNodeClickFunName, s, a, b)
    },
    checkChange (a, b, c) {
      if (!this.treeCheckChangeFunName || this.treeCheckChangeFunName === '') return
      this.$emit(this.treeCheckChangeFunName, a, b, c)
    },
    check (a, b) {
      if (!this.treeCheckFunName || this.treeCheckFunName === '') return
      this.$emit(this.treeCheckFunName, a, b)
    }
  },
  computed: {},

  mounted: function () {

  },

  watch: {
    treeFilterText (val) {
      this.$refs.modelTree.filter(val)
    }
  }
}
</script>

<style></style>

  父组件调用方式:

 <componentsTree 
	:treeData="treeData" 
	:treeEmptyText="treeEmptyText" 
	:treeNodeKey="treeNodeKey" 
	:treeRenderAfterExpand="treeRenderAfterExpand" 
	:treeHighlightCurrent="treeHighlightCurrent" 
	:treeDefaultExpandAll="treeDefaultExpandAll" 
	:treeExpandOnClickNode="treeExpandOnClickNode" 
	:treeCheckOnClickNodes="treeCheckOnClickNodes" 
	:treeDefaultExpandedKeys="treeDefaultExpandedKeys" 
	:treeShowCheckbox="treeShowCheckbox" 
	:treeCheckStrictly="treeCheckStrictly" 
	:treeDefaultCheckedKeys="treeDefaultCheckedKeys" 
	:treeAccordion="treeAccordion" 
	:treeIndent="treeIndent" 
	:treeIconClass="treeIconClass" 
	:treeFilterText="filterText" 
	@trNodeClick="treeNodeClick" treeNodeClickFunName="trNodeClick" 
	@trCheckChange="treeCheckChange" treeCheckChangeFunName="trCheckChange" 
	@trCheck="treeCheck" treeCheckFunName="trCheck">
</componentsTree>

  引入方式:

import componentsTree from '@/utils/Tree/Tree'

components: {
    componentsTree
  }

data () {
    return {
    treeData: [
        {
          id: 1,
          label: '名士豪庭',
          children: [
            {
              id: 4,
              label: '1号楼',
              children: [
                {
                  id: 9,
                  label: '名士豪庭-李四',
                  type: 'person'
                },
                {
                  id: 10,
                  label: '名士豪庭-王五',
                  type: 'person'
                }
              ]
            },
            {
              id: '1_4',
              label: '2号楼',
              children: [
                {
                  id: '1_4_9',
                  label: '名士豪庭-大胖胖',
                  type: 'person'
                },
                {
                  id: '1_4_10',
                  label: '名士豪庭-栗瀚昂',
                  type: 'person'
                }
              ]
            }
          ]
        },
        {
          id: 2,
          label: '金石晶城',
          children: [
            {
              id: 5,
              label: '3号楼',
              children: [
                {
                  id: '2_5_9',
                  label: '金石晶城-卞雨梅',
                  type: 'person'
                },
                {
                  id: '2_5_10',
                  label: '金石晶城-益振华',
                  type: 'person'
                }
              ]
            },
            {
              id: 6,
              label: '5号楼'
            }
          ]
        },
        {
          id: 3,
          label: '黄金国际',
          children: [
            {
              id: 7,
              label: '2号楼'
            },
            {
              id: 8,
              label: '5号楼',
              children: [
                {
                  id: '3_8_9',
                  label: '黄金国际-阮嘉志',
                  type: 'person'
                },
                {
                  id: '3_8_10',
                  label: '黄金国际-谷梁静曼',
                  type: 'person'
                }
              ]
            }
          ]
        }
      ],
      treeEmptyText: '暂无数据1',
      treeNodeKey: 'id',
      treeRenderAfterExpand: true,
      treeHighlightCurrent: true,
      treeDefaultExpandAll: true,
      treeExpandOnClickNode: false,
      treeCheckOnClickNodes: false,
      treeDefaultExpandedKeys: [1, 3],
      treeShowCheckbox: true,
      treeCheckStrictly: false,
      treeDefaultCheckedKeys: [],
      treeAccordion: true,
      treeIndent: 9,
      treeIconClass: ''
    }
}

  展示效果:

vue,基于element的tree组件封装第1张

免责声明:文章转载自《vue,基于element的tree组件封装》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇STM32使用FFT变换计算THD(20年四川省电子设计大赛E题软件部分)OBS 录制视频 自己留存下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

VueJS/Vuex/vue-router笔记- 开发/Error错误处理及优化相关记录

 开发记录备查笔记.....  Q.Vuejs(2.6.x):TS下使用Vuex例子:   记一个ts下的vuex store,备查   可以用以前的ES写法,但是想用强类型约束的话,就得改成TS的写法.   (吐槽:vue虽然已经全部用TS重构了,但还是有大量的any变量,希望随着以后的迭代,能完善成更出色的泛型类吧,现在的vuex真是不太好用,还不如自...

小程序 picker 多列选择器 数据动态获取

需求是将各校区对应各班级的数据 以两列选择器的方式展示出来,并且可以在选择完成之后记录选结果参数。 校区数据 和 班级数据 分别是两个接口,以 校区 teach_area_id 字段关联 其各班级数据 <picker mode="multiSelector" bindchange="bindMultiPickerChange" bindco...

Aviator

Aviator简介¶Aviator是一个高性能、轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值。现在已经有很多开源可用的java表达式求值引擎,为什么还需要Avaitor呢? Aviator的设计目标是轻量级和高性能,相比于Groovy、JRuby的笨重,Aviator非常小,加上依赖包也才450K,不算依赖包的话只有70K;当然,...

java通过jdbc连接数据库并更新数据(包括java.util.Date类型数据的更新)

一、步骤 1.获取Date实例,并通过getTime()方法获得毫秒数; 2.将获取的毫秒数存储到数据库中,注意存储类型为nvarchar(20); 3.读取数据库的毫秒数,作为Date构造方法的参数创建实例,有需要再转换时间格式。 二、代码示例 packagecom.yh.dao; importjava.sql.Connection; importja...

vue入门 显示数据 操作属性 操作样式 条件渲染

目录 vue.js的快速入门使用 1.1 vue.js库的下载 1.2 vue.js库的基本使用 1.3 vue.js的M-V-VM思想 1.4 显示数据 2. 常用指令 2.1 操作属性实列显示密码效果 2.2 事件绑定例如:完成商城购物车中的商品增加减少数量 2.3 操作样式 2.3.1 控制标签class类名 2.3.2 控制...

jdbcTemplate 获取数据表结构

jdbcTemplate 操作方法  Java代码   /**  *1.方法一:  */   String sql = "select * from "+ tableName;   //RowCountCallbackHandler rcch = new RowCountCallbackHandler();   //this.jdbcTemplate...