Vue组件(一) - 二次封装ElementUI实现tree树形组件

本文介绍如何对ElementUI的Tree组件进行二次封装,实现基础的树形组件功能,包括与el-tree相似的特性,并展示了base-tree.vue和treeDemo.vue的代码片段,详细说明了右键事件处理及菜单项弹出操作。
摘要由CSDN通过智能技术生成

功能描述

基础功能同el-tree

在这里插入图片描述在这里插入图片描述在这里插入图片描述

代码

base-tree.vue:

<!--
 * @Description: 公共树组件
 * @Author: HMM
 * @Date: 2021-01-11 16:23:23
 * @FilePath: base-tree.vue
变量:
 expandNode:是否展开所有节点
 isShowFilter: 是否需要节点过滤
 treeProps: 树形结构配置项
事件:
 @handleNodeClick: 节点被点击时的回调
 @handleCheck:当复选框被点击的时候触发
 @handleCheckChange:节点选中状态发生变化时的回调
方法:同element-ui
getCurrentKey
getCurrentNode
setCurrentKey
getCheckedKeys
getCheckedNodes

-->
<template>
  <div class="baseTree">
    <el-input v-if="isShowFilter" size="small" :placeholder="placeholder" v-model="filterText">
    </el-input>
    <el-tree ref="baseTree"
    :data="treeList"
    :node-key="treeProps.id"
    :props="treeProps"
    :highlight-current="highlight"
    :accordion="accordion"
    :default-expand-all="expand"
    :default-expanded-keys="expandedKeys"
    :auto-expand-parent="expandParent"
    :expand-on-click-node="expandNode"
    :show-checkbox="multiple"
    :check-strictly="checkStrictly"
    :filter-node-method="filterNode"
    @node-click="handleNodeClick"
    @node-expand="handleNodeExpand"
    @node-collapse="handleNodeCollapse"
    @check="handleCheck"
    @check-change="handleCheckChange"
    @node-contextmenu="handleNodeContextMenu">
    </el-tree>
  </div>
</template>

<script>
export default {
     
  props: {
     
    // treeList: {
     
    //   type: Array,
    //   default () {
     
    //     return [];
    //   }
    // },
    // 默认树形结构配置项
    treeProps: {
     
      type: Object,
      default() {
     
        return {
     
          id: 'id', // Number类型:树组件ID(node-key)
          label: 'label', // String类型 : 树组件显示名称
          pid: 'parentId', // Number类型:父级ID
          children: 'children' // String类型:子节点
        };
      }
    },
    // 自动收起
    accordion:{
     
      type:Boolean,
      default:() => {
      return false }
    },
    // 是否展开所有节点,默认展开
    expand: {
     
      type: Boolean,
      default() {
     
        return true;
      }
    },
    // 展开子节点的时候是否自动展开父节点 默认值为 true
    expandParent:{
     
      type: Boolean,
      default() {
     
        return true;
      }
    },
    // 是否在点击节点的时候展开或者收缩节点, 默认值为 true,如果为 false,则只有点箭头图标的时候才会展开或者收缩节点。
    expandNode: {
     
      type: Boolean,
      default() {
     
        return true;
      }
    },
    // 默认展开的节点的 key 的数组
    expandedKeys:{
     
      type: Array,
      default() {
     
        return [];
      }
    },
    // 是否高亮当前选中节点,默认值是 true
    highlight: {
     
      type: Boolean,
      default() {
     
        return true;
      }
    },
    // 是否可多选,默认单选
    multiple: {
     
      type: Boolean,
      default() {
     
        return false;
      }
    },
    // 显示复选框情况下,是否严格遵循父子不互相关联
    checkStrictly: {
     
      type: Boolean,
      default() {
     
        return false;
      }
    },
    // 图标url
    iconUrl: {
     
      type: String,
      default() {
     
        return '';
      }
    },
    placeholder: {
     
      type: String,
      default: (
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值