vue---element el-tree全选、清空、展开、收缩等基本功能总结

2023-11-20

目录

el-tree

1、获取选中

2、设置选中

3、全选、清空

4、展开收缩

5、完整代码


 

el-tree

用来展示树型结构的信息,具备展开和折叠的功能。通过案例介绍相关知识点内容,案例实现的功能如下:

1、获取选中

可通过node和key(el-tree中需设置node-key,一般为id)获取选中的节点

设置默认选中id=1的节点

 
getCheckedNodes 若节点可被选择(即 show-checkbox 为 true),则返回目前被选中的节点所组成的数组 (leafOnly, includeHalfChecked) 接收两个 boolean 类型的参数,1. 是否只是叶子节点,默认值为 false 2. 是否包含半选节点,默认值为 false
getCheckedKeys 若节点可被选择(即 show-checkbox 为 true),则返回目前被选中的节点的 key 所组成的数组 (leafOnly) 接收一个 boolean 类型的参数,若为 true 则仅返回被选中的叶子节点的 keys,默认值为 false
 // 1.通过node获取
console.log("通过node获取", this.$refs.tree.getCheckedNodes());
 // 2.通过key获取
 console.log("通过key获取", this.$refs.tree.getCheckedKeys());

2、设置选中

可通过node和key(el-tree中需设置node-key,一般为id)设置选中的节点。

setCheckedNodes 设置目前勾选的节点,使用此方法必须设置 node-key 属性 (nodes) 接收勾选节点数据的数组
 this.$refs.tree.setCheckedNodes([
        { id: 2, label: "一级 2" },
        {
          id: 7,
          label: "二级 3-1"
        }
      ]);
setCheckedKeys 通过 keys 设置目前勾选的节点,使用此方法必须设置 node-key 属性 (keys, leafOnly) 接收两个参数,1. 勾选节点的 key 的数组 2. boolean 类型的参数,若为 true 则仅设置叶子节点的选中状态,默认值为 false
this.$refs.tree.setCheckedKeys([5, 8]);

3、全选、清空

①遍历所有的节点,并设置其checked属性为true或false

//  获取根节点
      let rootNode = this.$refs.tree.getNode(this.treeData[0].id).parent;
      travelNodes(rootNode);
      function travelNodes(tmpRoot) {
        // 选中该节点
        tmpRoot.checked = true;
        // 叶子节点
        if (tmpRoot.childNodes.length === 0) {
          return;
        }
        // 不是叶子节点,递归遍历
        else {
          let tmpChildNoes = tmpRoot.childNodes;
          for (let i = 0; i < tmpChildNoes.length; i++) {
            travelNodes(tmpChildNoes[i]);
          }
        }
      }

②通过设置node或key

 注意:当el-tree设置check-strictly时,通过setCheckedNodes全选方法失效,父子不关联,只能选中一级父节点;通过key方法需要遍历获得key。

 //全选
this.$refs.tree.setCheckedNodes(this.treeData);
 // this.$refs.tree.setCheckedKeys([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);

//清空
 // this.$refs.tree.setCheckedNodes([]);
this.$refs.tree.setCheckedKeys([]);

4、展开收缩

遍历所有的节点,并设置其expanded属性为true或false

 for (let i = 0; i < this.treeData.length; i++) {
          this.$refs.tree.store.nodesMap[this.treeData[i].id].expanded = true;
        }

5、完整代码

<template>
  <div class="hello">
    <h1>el-tree基本功能</h1>
    <el-tree
      ref="tree"
      :data="treeData"
      show-checkbox
      node-key="id"
      @node-click="handleNodeClick"
      @check-change="handleCheckChange"
      :default-checked-keys="[1]"
      default-expand-all
      :props="defaultProps"
      check-strictly
    ></el-tree>
    <div class="btn">
      <el-button size="mini" type="primary" @click="getChecked">获取选中</el-button>
      <el-button size="mini" type="primary" @click="setChecked">设置选中</el-button>
      <el-button size="mini" type="primary" @click="selectAllNodes">全选</el-button>
      <el-button size="mini" type="primary" @click="clearAllNodes">清空</el-button>
      <el-button size="mini" type="warning" @click="handleSelectAll">全选/清空</el-button>
      <el-select size="mini" v-model="value" @change="selectChange">
        <el-option
          v-for="item in options"
          :key="item.value"
          :label="item.label"
          :value="item.value"
        ></el-option>
      </el-select>
    </div>
  </div>
</template>

<script>
export default {
  name: "hello",
  data() {
    return {
      defaultProps: {
        children: "childList",
        label: "label"
      },
      treeData: [
        {
          id: 1,
          label: "一级 1",
          childList: [
            {
              id: 4,
              label: "二级 1-1",
              childList: [
                {
                  id: 9,
                  label: "三级 1-1-1"
                },
                {
                  id: 10,
                  label: "三级 1-1-2"
                }
              ]
            }
          ]
        },
        {
          id: 2,
          label: "一级 2",
          childList: [
            {
              id: 5,
              label: "二级 2-1"
            },
            {
              id: 6,
              label: "二级 2-2"
            }
          ]
        },
        {
          id: 3,
          label: "一级 3",
          childList: [
            {
              id: 7,
              label: "二级 3-1"
            },
            {
              id: 8,
              label: "二级 3-2"
            }
          ]
        }
      ],
      options: [
        {
          value: "1",
          label: "展开所有"
        },
        {
          value: "2",
          label: "收合所有"
        }
      ],
      value: "展开所有",
      checkAll: false
    };
  },
  methods: {
    handleNodeClick(data) {
      // console.log(data);
      this.$refs.tree.getCheckedKeys();
    },
    handleCheckChange(data, checked, indeterminate) {
      // console.log(data, checked, indeterminate);
    },
    //获取选中
    getChecked() {
      // 1.通过node获取
      console.log("通过node获取", this.$refs.tree.getCheckedNodes());
      // 2.通过key获取
      console.log("通过key获取", this.$refs.tree.getCheckedKeys());
    },
    // 设置选中
    setChecked() {
      // 1.通过node设置
      this.$refs.tree.setCheckedNodes([
        { id: 2, label: "一级 2" },
        {
          id: 7,
          label: "二级 3-1"
        }
      ]);
      // 2.通过key设置
      // this.$refs.tree.setCheckedKeys([5, 8]);
    },
    // 全选
    selectAllNodes: function() {
      //  获取根节点
      let rootNode = this.$refs.tree.getNode(this.treeData[0].id).parent;
      travelNodes(rootNode);
      function travelNodes(tmpRoot) {
        // 选中该节点
        tmpRoot.checked = true;
        // 叶子节点
        if (tmpRoot.childNodes.length === 0) {
          return;
        }
        // 不是叶子节点,递归遍历
        else {
          let tmpChildNoes = tmpRoot.childNodes;
          for (let i = 0; i < tmpChildNoes.length; i++) {
            travelNodes(tmpChildNoes[i]);
          }
        }
      }
    },
    // 清空
    clearAllNodes: function() {
      this.$refs.tree.setCheckedKeys([]);
    },
    // 全选/清空
    //当el-tree设置check-strictly时,通过setCheckedNodes全选方法失效,父子不关联,只能选中一级父节点
    handleSelectAll() {
      if (this.checkAll == false) {
        this.$refs.tree.setCheckedNodes(this.treeData);
        // this.$refs.tree.setCheckedKeys([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
        this.checkAll = true;
      } else {
        // this.$refs.tree.setCheckedNodes([]);
        this.$refs.tree.setCheckedKeys([]);
        this.checkAll = false;
      }
    },
    // 展开收合
    selectChange(value) {
      if (value == 1) {
        // 展开所有
        for (let i = 0; i < this.treeData.length; i++) {
          this.$refs.tree.store.nodesMap[this.treeData[i].id].expanded = true;
        }
      } else if (value == 2) {
        // 收合所有
        for (let i = 0; i < this.treeData.length; i++) {
          this.$refs.tree.store.nodesMap[this.treeData[i].id].expanded = false;
        }
      }
    }
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.hello {
  width: 600px;
  border: 1px solid rgb(209, 203, 203);
  border-radius: 6px;
  margin: 0 auto;
  padding: 20px;
  text-align: center;
}
.btn {
  margin-top: 20px;
}
.el-select {
  margin-left: 10px;
  width: 120px;
}
</style>

参考:element el-tree

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue---element el-tree全选、清空、展开、收缩等基本功能总结 的相关文章

  • Linux shell 编程之 - 合并两个文件

    两个文件a1 b1 内容分别如下 a1 1 2 3 b1 a b c 如何把它们合在一起内容如下的 1 a 2 b 3 c paste d a1 a2 SUN的Solaris只能合并12个文件 sco5 5下ksh只能合并6个文件 在aix
  • Allegro PCB封装焊盘介绍(一)

    PCB封装焊盘结构 焊盘结构如图 1所示 图 1焊盘结构 锡膏层 SMT刷锡膏贴片用 一般贴片焊盘要选 跟焊盘等大 阻焊层 把焊盘裸露出来 不开的话 焊盘会被油墨盖住 这样无法焊接哦 一般比焊盘大0 1mm 顶层 底层焊盘 实际焊盘大小 电
  • tensorRT 与 torchserve-GPU性能对比

    实验对比 前端时间搭建了TensorRT Torchserve GPU 最近抽时间将这两种方案做一个简单的实验对比 实验数据 Cuda11 0 Xeon 6242 3 1 80 RTX3090 24G Resnet50 TensorRT T

随机推荐

  • nosql练习

    1 string类型数据的命令操作 1 设置键值 2 读取键值 3 数值类型自增1 4 数值类型自减1 5 查看值的长度 2 list类型数据的命令操作 1 对列表city插入元素 Shanghai Suzhou Hangzhou 2 将列
  • Qt中代码添加背景图

    第一步 选择一张背景图下到本地 第二步 在qt中点击添加新文件选择图中位置 随便起个名字 点击下一步 这时项目中多出一个目录 选择打开资源编辑器 底部添加前缀 注意该前缀是在内部使用图的路径 点击添加 gt 添加前缀 我这里直接使用的 作为
  • STM32F4实现SD卡读写

    更多交流欢迎关注作者抖音号 81849645041 目的 熟悉SD卡和SDIO工作原理 掌握SD卡的读写 原理 大多单片机系统都需要大容量存储设备 以存储数据 目前常用的有 U 盘 FLASH 芯片 SD 卡等 他们各有优点 综合比较 最适
  • 2020网易笔试编程题(一)

    题目 在一次聚会中 教授们被要求写下自己认可哪位教授的学术成果 也可以写自己 且可能出现重复 已知 如果教授A认可教授B 且教授B认可教授C 那么即可视为教授A也认可教授C 现在我们想知道多少对教授是两两互相认可的 输入举例 输入教授人数
  • oracle中replace怎么用,oraclereplace函数怎么用

    1 REPLACE函数怎么用 REPLACE 参数1 参数2 参数3 参数4 参数1 是要替换其部分字符的文本 参数2 是要用参数4替换的参数1中字符的起始位置 参数3 是希望REPLACE用参数4替换参数1中从参数2开始算起的字符个数 参
  • js 将一维数组转为二维数组并分组

    let arr a W b W01 a W b W02 a WC b WC01 a WC b WC02 a WC b WC02 a WC b WC02 let map arr forEach item gt if map item a ma
  • 理解Spring定时任务@Scheduled的两个属性fixedRate和fixedDelay

    fixedRate和fixedDelay都是表示任务执行的间隔时间 fixedRate和fixedDelay的区别 fixedDelay非常好理解 它的间隔时间是根据上次的任务结束的时候开始计时的 比如一个方法上设置了fixedDelay
  • js 手机、邮箱、身份证格式验证

  • 使用Transformer与无监督学习,OpenAI提出可迁移至多种NLP任务的通用模型

    OpenAI 最近通过一个与任务无关的可扩展系统在一系列语言任务中获得了当前最优的性能 目前他们已经发布了该系统 OpenAI 表示他们的方法主要结合了两个已存的研究 即 Transformer 和无监督预训练 实验结果提供了非常令人信服的
  • 不相交集类(并查集)

    并查集 就是只有合并和 查找操作的一种数据结构 很简单 主要判断一个元素是否在一个集合里 主要应用在最小生成树 Kruskal算法 看到图的时候会将实现代码贴上 package chapter8 类名 DisjSets 说明 实现并查集 按
  • Siddhi

    1 Siddhi是什么 Siddhi是一个开源的流处理和复杂事件处理引擎 由WSO2公司开发 它提供了一个强大而灵活的框架 用于处理实时流数据和复杂事件 官网 2 Siddhi特点和功能 Siddhi具有以下特点和功能 1 实时流处理 Si
  • TypeScript之元组、数组以及 as const

    一 元组 数组 在 TS 中 元组表示 这个数组有不同的类型 简单的一句话来表述 如果类型相同的一组数据就是数组 反之就是元组 数组的 api 对于元组来讲也是通用的 push pop等 只是类型不同 1 数组的定义 定义数组的方式 let
  • 个人喜欢的网站http://www.w3school.com.cn

    http www w3school com cn 这个网站很好 能帮助很多人
  • 用 JAVA 编写一个 M3U8 视频下载器

    总览 本文简要介绍了 M3U8 视频文件格式 并且用代码实现下载一个 M3U8 文件的视频资源 背景 前段时间在做视频真实地址解析下载时候发现很多视频网站用了 CKplayer 播放的时候传过来的参数是一个 M3U8 文件的链接 和普通的视
  • 【JS基础数组方法】数组过滤、切割、查询

    1 Array filter 数组过滤 语法 array filter function currentValue index arr thisValue 有两个参数 一个是函数 为必选参数 函数中又有三个参数 currentValue为当
  • Unity单元测试流程

    文章目录 环境 流程 1 创建一个存放 单元测试程序集 的目录 2 打开 Test Runner 窗口 3 选择单元测试模式 4 创建单元测试程序集 5 创建测试脚本 6 运行测试 环境 Unity 2020 3 3f1 流程 1 创建一个
  • centos 通过docker搭建 kurento-media-server 遇到的各种奇葩的大坑

    kurento media server里的坑有n多 而且很多是极其初级的坑 忍不住吐槽一下 不知道是故意的还是他们的程序员刚毕业 1 首先kurento media server只能安装在ubuntu14 和16版本 2 如果你想在cen
  • ST-GCN的学习之路(一)论文分析

    目录 St GCN 2018AAAI Introduction Multiple modalities of human action The weakless of previous methods This work s advanta
  • antv-g2语法总结

    目的 使用antv g2完成一个图表 该图表有两种结构组成 散点图与矩形图组成 我们需要将散点图与矩形图分别在两个view中绘制 所以还需要总结一下view的概念 第一步语法基础 首先是引入相应依赖 其次是创建html容器 div div
  • vue---element el-tree全选、清空、展开、收缩等基本功能总结

    目录 el tree 1 获取选中 2 设置选中 3 全选 清空 4 展开收缩 5 完整代码 el tree 用来展示树型结构的信息 具备展开和折叠的功能 通过案例介绍相关知识点内容 案例实现的功能如下 1 获取选中 可通过node和key