element中Tree 树形控件实现节点过滤和懒加载节点

news2024/12/24 8:54:58

目录

  • 1.代码实现
  • 2. 效果图
  • 3. 使用到的部分属性说明
  • 4. 更多属性配置查看element官网

1.代码实现

<template>
  <div class="TreePage">
    <el-row :gutter="20">
      <!--村数据-->
      <el-col :span="24">
        <div class="head-container">
          <el-input v-model="deptName" placeholder="请输入名称" clearable size="small" prefix-icon="el-icon-search"
            style="margin-bottom: 20px" />
        </div>
        <!-- 组织树 -->
        <div class="head-container">
          <el-tree ref="tree" :props="defaultProps" :default-expanded-keys="treeData" :expand-on-click-node="false"
            :load="loadNode" lazy node-key="deptId" :filter-node-method="filterNode" @node-click="handleNodeClick" />
        </div>
      </el-col>
    </el-row>
  </div>
</template>
      
<script>
// import { lazyList } from '@/api/manager/tree'
export default {
  name: "TreePage",
  props: {},
  data() {
    return {
      // 模拟数据
      analoDdata_01: [
        {
          "deptId": 100,
          "parentId": 0,
          "parentName": null,
          "ancestors": "0",
          "deptName": "XX街道",
          "children": [],
          "existSub": true, //是否还存在下级
        }
      ],
      analoDdata_02: [
        {
          "deptId": 1201,
          "parentId": 100,
          "parentName": null,
          "ancestors": "0,100",
          "deptName": "XX01村",
          "children": [],
          "existSub": true
        },
        {
          "deptId": 1202,
          "parentId": 100,
          "parentName": null,
          "ancestors": "0,100",
          "deptName": "XX02村",
          "children": [],
          "existSub": true
        },
        {
          "deptId": 1203,
          "parentId": 100,
          "parentName": null,
          "ancestors": "0,100",
          "deptName": "XX03村",
          "children": [],
          "existSub": false
        }

      ],
      // 村名称
      deptName: undefined,
      defaultProps: {
        children: 'children',
        label: 'deptName',
        isLeaf: 'leaf',//指定节点是否为叶子节点,仅在指定了 lazy 属性的情况下生效
      },
      // 默认展开的节点的 key 的数组
      treeData: [],
    };
  },
  watch: {
    // 在需要对节点进行过滤时,调用 Tree 实例的filter方法,参数为关键字。
    // 需要注意的是,此时需要设置filter-node-method,值为过滤函数。
    // 根据名称筛选村社树
    deptName(val) {
      this.$refs.tree.filter(val)
    }
  },
  methods: {
    //  关于树懒加载 (组件加载完成后,会主动触发一次),后续则是点击时候会触发,
    // 或者通过default-expanded-keys默认展开的节点的 key 的数组来触发这个方法,实现指定加载哪几层的数据。
    loadNode(node, resolve) {
      console.log(node, 'node')
      // 如果展开第一级节点,从后台加载一级节点列表
      if (node.level == 0) { // 获取第一层 也就是 analoDdata_01的数据
        console.log('第一级节点')
        const queryParams = {}
        this.loadNodeHandle(resolve, queryParams, 1) //1获取模拟数据需要,实际可不用传递
      }
      // 如果展开其他级节点,动态从后台加载下一级节点列表
      if (node.level >= 1) { // 获取第一层的下级 也就是 analoDdata_02的数据
        console.log('其他级节点')
        const queryParams = {}
        // 根据当前节点的id,查询他下级的相关节点
        queryParams.parentId = node.key
        this.loadNodeHandle(resolve, queryParams, 2)// 2获取模拟数据需要,实际可不用传递
      }
    },
    async loadNodeHandle(resolve, queryParams, type) {
      console.log(queryParams, 'queryParams')
      // 根据实践项目调用接口
      // const list = await lazyList(queryParams).then(res => {
      //   console.log(res, '关于树懒加载')
      //   res.data.forEach(item => {
      //     item.leaf = !item.existSub
      //   })
      //   return res.data
      // })

      // 模拟数据
      let list = [];
      if (type == 1) {
        list = this.analoDdata_01
        list.forEach(item => {
          item.leaf = !item.existSub
        })
      } else if (type == 2) {
        list = this.analoDdata_02
        list.forEach(item => {
          item.leaf = !item.existSub
        })
      }
      
      // 根据某些条件,获取到需要默认展开的节点的 key 的数组 this.treeData; 
      // this.treeData 中的id对应的节点,都会默认加载loadNode方法获取其下级数据,并展开;
      if (list.length == 1) {
        list.forEach(element => {
          this.treeData.push(element.deptId)
        })
      }

      return resolve(list)
    },
    // 过滤函数
    filterNode(value, data) {
      // console.log(value, data)
      if (!value) return true
      return data.deptName.indexOf(value) !== -1
    },
    // 左侧网格树-节点单击事件
    handleNodeClick(data) {
      console.log(data, '左侧网格树-节点单击事件')
    },
  },

};
</script>
      

2. 效果图

在这里插入图片描述

3. 使用到的部分属性说明

  1. default-expanded-keys: 默认展开的节点的 key 的数组;
  2. expand-on-click-node: 是否在点击节点的时候展开或者收缩节点, 默认值为 true,如果为 false,则只有点箭头图标的时候才会展开或者收缩节点;
  3. load :加载子树数据的方法,仅当 lazy 属性为true 时生效;
  4. lazy :是否懒加载子节点,需与 load 方法结合使用;
  5. node-key :每个树节点用来作为唯一标识的属性,整棵树应该是唯一的;
  6. filter-node-method: 对树节点进行筛选时执行的方法,返回 true 表示这个节点可以显示,返回 false 则表示这个节点会被隐藏;
  7. node-click :节点被点击时的回调;

4. 更多属性配置查看element官网

https://element.eleme.cn/#/zh-CN/component/tree

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1352484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LobeChat:搭建你的私人 GPT!

前端训练营&#xff1a;1v1私教&#xff0c;终身辅导计划&#xff0c;帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~ Hello&#xff0c;大家好&#xff0c;我是 Sunday。 之前有同学问我&#xff1a;“老师&#xff0c;我想要搭建一个个人的 …

学习Java中的数据结构及API这一篇就够了

Java中的数据结构及API 1. 线性表1-1. 顺序表Array数组ArrayList集合 1-2. 链表自定义链表LinkedList 2. 队列2-1. ArrayDeque2-2. LinkedList2-3. 区别 3. 栈3-1. ArrayDeque3-2. LinkedList 4. 树4-1. 二叉树定义 5. 图5-1. 图定义 1. 线性表 1-1. 顺序表 顺序表是指用一组…

数据库(五)数据库设计 | 实体关系模型ER model 映射基数 弱实体集 实体关系设计

文章目录 1 实体关系模型 ER模型ER model1.1 E-R模型结构1.1.1 实体和实体集1.1.2 属性1.1.3 关系集合 1.2 ER关系图绘制1.2.1 实体集绘制1.2.2 关系集绘制 2 映射基数 Mapping Cardinalities2.1 映射基数类型2.1.1 一对一2.1.2 一对多2.1.3 多对一2.1.4 多对多 2.2 全部或部分…

stable diffusion WebUI基础-安装

电脑配置要求 N卡显存6G起(建议直接上12G)内存建议16G,8G也可固态盘500G以上CPU i5即可魔法上网虚拟环境安装python 我非常不建议直接在自己的电脑里直接装python,因为现在很多项目的环境比较乱,对于stable diffusion 尽可能有一个干净的python 环境最好,所以我推荐使用mi…

SpingBoot的项目实战--模拟电商【3.购物车模块】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于SpringBoot电商项目的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.功能需求 二.代码编写 …

国内的数据安全与隐私保护现状如何?

在过去的几年中&#xff0c;中国已经采取了一系列的措施来应对数据安全和隐私保护的挑战。 法律法规 中国已经出台了一系列的法律法规来保护数据安全和隐私。例如&#xff0c;《中华人民共和国数据安全法》和《中华人民共和国个人信息保护法》等法律已经在2021年颁布施行。此外…

在pbootcms中制作静态化的TAG标签列表

如果你使用pbootcms来管理你的网站&#xff0c;你可能会遇到这样的需求&#xff1a;将TAG标签列表改成静态化的类似于栏目结构的需求。下面是实现这个需求的步骤。 步骤1 修改PHP文件 打开 apps/home/controller/ParserController.php 并找到大约在1852行左右的代码段&#x…

数据库02-06 形式化

01. 03. 04. 05. 06. 07. 08. 09.

网页爬虫对于网络安全有哪些影响?

在当今信息爆炸的时代&#xff0c;网络已经成为人们获取信息、交流思想和开展业务的重要平台。然而&#xff0c;随着网络的普及和技术的不断发展&#xff0c;网络安全问题也日益凸显&#xff0c;其中网页爬虫对网络安全的影响不容忽视。本文将就网页爬虫对网络安全的影响进行深…

odoo模型钩子函数,启动odoo执行自定义代码

在odoo的models模型基类中定义了这样一个方法_register_hook, 从方法的备注(表单注册以后执行的代码)可以看出这个方法的作用, 所以当我们想在odoo启动以后执行一些代码 比如队列监听等等事情的时候,就可以利用这个方法执行我们的代码 示例: class ModelName(models.Model):…

《动手学深度学习》学习笔记 第7章 现代卷积神经网络

本系列为《动手学深度学习》学习笔记 书籍链接&#xff1a;动手学深度学习 笔记是从第四章开始&#xff0c;前面三章为基础知识&#xff0c;有需要的可以自己去看看 关于本系列笔记&#xff1a; 书里为了让读者更好的理解&#xff0c;有大篇幅的描述性的文字&#xff0c;内容很…

用PHP搭建一个绘画API

【腾讯云AI绘画】用PHP搭建一个绘画API 大家好&#xff01;今天我要给大家推荐的是如何用PHP搭建一个绘画API&#xff0c;让你的网站或应用瞬间拥有强大的绘画能力&#xff01;无论你是想要让用户在网页上绘制自己的创意&#xff0c;还是想要实现自动绘画生成特效&#xff0c;这…

关于简单的数据可视化

1. 安装数据可视化必要的openpyxl、pandas&#xff0c;matplotlib等软件包 使用清华源&#xff0c;命令如下&#xff1a; pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn pandaspip install -i https://pypi.tuna.tsingh…

【ROS2】MOMO的鱼香ROS2(五)ROS2入门篇——ROS2接口与自定义

ROS2接口与自定义 引言1 ROS2自带接口1.1 ROS2通用标准消息包1.2 ROS2传感器消息包1.3 ROS2几何相关消息包 2 ROS2接口介绍2.1 常用CLI命令2.2 原始数据类型与包装类型 3 自定义接口示例3.1 接口定义3.2 自定义接口RCLPY 引言 笔者跟着鱼香ROS的ROS2学习之旅 学习参考&#xf…

微同城生活源码系统:专业搭建本地生活服务平台 附带完整的安装部署教程

随着移动互联网的普及&#xff0c;人们越来越依赖手机进行日常生活中的各种活动&#xff0c;包括购物、餐饮、娱乐等。而传统的本地生活服务平台往往存在着功能单一、用户体验差等问题&#xff0c;无法满足用户日益增长的需求。因此&#xff0c;开发一款功能强大、易用性强的本…

CDGA,CDGP,CDMP有啥区别?考哪个好?

&#x1f3af;CDMP数据管理专业认证是由DAMA国际于2004推出&#xff0c;是一项涵盖学历教育、工作经验和专业知识考试在内的综合资格认证&#xff0c;也是目前全球为一数据管理方面权威性认证。 ✅CDGA&#xff1a;数据治理工程师&#xff0c;“DAMA中国”组织的数据治理方面的…

利用Ubuntu 20.04(WSL2)+ DevEco Device Tools搭建鸿蒙设备开发环境

小白一个&#xff0c;因为项目原因需要用到小熊派BearPi Nano做开发&#xff0c;决定使用WSL2上的Ubuntu 20.04进行开发环境的搭建&#xff0c;记录一下搭建的流程&#xff0c;过程难免有疏漏&#xff0c;望谅解。 过程中参考了随遇而安的dandelion 大佬的这一篇文章&#xff1…

【MPC学习笔记】01:MPC简介(Lecture 1_1 Unconstrained MPC)

本笔记来自北航诸兵老师的课程 课程地址&#xff1a;模型预测控制&#xff08;2022春&#xff09;lecture 1-1 Unconstrained MPC 文章目录 0 MPC 简介0.1 案例引入0.2 系统模型0.3 MPC的优点0.4 MPC的缺点0.5 MPC的未来 1 详细介绍 0 MPC 简介 0.1 案例引入 MPC&#xff08;…

MySQL--安装与配置与向日葵的基本操作使用

一.MySQL介绍 1.1 MySQL简介 MySQL是一个开源的关系型数据库管理系统&#xff0c;最早由瑞典MySQL AB公司开发。这个数据库系统有着高可靠性、高性能和易用性的特点&#xff0c;在互联网上得到了广泛的应用。MySQL支持SQL语言&#xff0c;可以运行在多种操作系统上&#xff0c…

数据结构【图篇】

数据结构【图篇】 文章目录 数据结构【图篇】前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f; 目录一、图(一)、图的存储(二)、图的基本操作(三)、最短路径问题 二、拓扑排序三、结语 前言 为什么突然想学算法了&#xff1f; > 用较为“官方…