element-ui Tree之懒加载叶子节点强制设置父级半选效果

效果:

前言:

我们是先只展示一级的,二级的数据是通过点击之后通过服务器获取数据,并不是全量数据直接一起返回回来的。

问题:

当你设置了默认选中的子节点,但是由于刚进入页面此时tree中数据暂是没有这个子节点时,其父节点并不会具有半选效果

issue地址:

[Feature Request] tree components support setHalfCheckedNodes and setHalfCheckedkeys · Issue #13500 · ElemeFE/element · GitHub

html代码:

html 复制代码
<el-tree
   ref="tree"
   :props="{
      label: 'Name',
      isLeaf: 'IsLeaf',
   }"
   :load="loadNode"
   lazy
   show-checkbox
   :filter-node-method="filterNode"
   node-key="Id"
   :default-checked-keys="defaultCheckedKeys"
   @check-change="handleCheckChange"
></el-tree>

需要回显数据:

javascript 复制代码
selectDoctorInfo: [
        {
          Type: 1,
          RelationId: '68d5d334-4eff-4cf4-8152-fa6a45546dae', // 子级的 id
          OrgId: 'bbdcbc14-290f-43f6-91d9-fd31529dbec3', // 父级的 id
        },
        {
          Type: 1,
          RelationId: '08478d81-9582-4151-9288-fca71beb43fb',
          OrgId: 'bbdcbc14-290f-43f6-91d9-fd31529dbec3',
        },
        {
          Type: 2,
          RelationId: '63daa04f-be13-481a-8e5e-6160fee89203',
          OrgId: '63daa04f-be13-481a-8e5e-6160fee89203',
        },
      ]

核心代码:

javascript 复制代码
onEchoTreeData() {
      // 接口返回已选择的数据  allHospitalList: 一级的全部数据  selectDoctorInfo: 需要回显的数据 
      const selectKeys = [];
      this.selectDoctorInfo.forEach((v) => {
        this.allHospitalList.forEach((s) => {
          if (v.Type === 1) {
            if (s.Id === v.OrgId) {
              selectKeys.push(v.RelationId);
              this.$nextTick(() => {
                var node = this.$refs.tree.getNode(v.OrgId); // 拿到父级的 id
                if (node) {
                  // 这里是核心代码
                  node.indeterminate = true // indeterminate强制设置为半选
                }
              })
            }
          }
          if (v.Type === 2) {
            if (s.Id === v.RelationId) {
              selectKeys.push(v.RelationId);
            }
          }
        });
      });
      this.defaultCheckedKeys = selectKeys;
    },
相关推荐
ohyeah10 分钟前
用 Vue3 + Coze API 打造冰球运动员 AI 生成器:从图片上传到风格化输出
前端·vue.js·coze
掘金安东尼1 小时前
React 已经改变了,你的 Hooks 也应该改变
前端·vue.js·github
麦麦大数据1 小时前
F053 投标推荐可视化系统+推荐算法vue+flask+爬虫
vue.js·爬虫·flask·可视化·推荐算法·招投标
一 乐1 小时前
智慧医药|基于springboot + vue智慧医药系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端
毕设源码-邱学长3 小时前
【开题答辩全过程】以 基于Vue的爱心公益募捐平台的设计与实现为例,包含答辩的问题和答案
前端·javascript·vue.js
梦想是准点下班4 小时前
【vue3】 + 【vite】 + 【vite-plugin-obfuscator】混淆打包 => 放弃了,样式会丢
前端·vue.js
梦想是准点下班4 小时前
【vue3】 + 【vite】 + 【rollup-plugin-obfuscator】混淆打包 => 打包报错
前端·vue.js
星_离4 小时前
高德地图-物流路线
前端·vue.js
inCBle4 小时前
vue2 封装一个自动校验是否溢出的 tooltip 自定义指令
前端·javascript·vue.js
周万宁.FoBJ4 小时前
在vite+Vue3项目中使用 自定义svg 图标,借助vite-plugin-svg-icons 封装SvgIcon组件
vue.js