Element-UI 在表单通过按钮动态增加Tree树形控件

news/2024/11/30 1:45:31/

文章目录

  • 问题背景
  • 动态增加的Tree控件
    • 创建el-tree控件数据
    • 动态增加的el-tree控件
    • 编辑数据前需进行设置勾选状态
    • 新增/编辑请求前需转换格式


问题背景

在表单中动态增加的Tree控件中,注册一个 ref 引用,报错如下:

this.$refs[‘showRegionsTree’] is not a function

在调用Tree控件的 setCheckedKeysgetCheckedKeys,分别报错如下:

Cannot read property ‘setCheckedKeys’ of undefined"
Cannot read property ‘getCheckedKeys’ of undefined"

动态增加的Tree控件

表单中动态增加控件可参考文章,通过按钮增加Tree控件大同小异:

Element-UI 实现动态增加多个输入框并校验

动态增加的Tree控件如图:

在这里插入图片描述

先看实现核心代码吧!

创建el-tree控件数据

data() {return {// tree数据showRegions: {data: [],props: { children: 'children', label: 'name' },selectedIds: []}}
},created() {// 请求并填充数据loadRegionData().then(res => {this.showRegions.data = [{ id: 0, name: '展示地区', children: res }]})
},

动态增加的el-tree控件

<el-card class="box-card" shadow="never"><el-scrollbar style="height:300px; width: 300px;"><el-tree ref="showRegionsTree" :data="showRegions.data" :default-checked-keys="showRegions.selectedIds" :props="showRegions.props" accordion show-checkbox node-key="id" /></el-scrollbar>
</el-card>

编辑数据前需进行设置勾选状态

报错:

this.$refs[‘showRegionsTree’] is not a function

这个错误是因为你的dom元素还没有加载完,你就想使用 setCheckedKeys 设置目前勾选的节点。也就是你写的this.$refs.tree.setCheckedKeys(list); 这个里面的 tree 还没有加载出来。

解决方案:

this.$nextTick(() => {// 执行
});

(1)Vue.nextTick([callback, context])

用法:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。

(2)vm.$nextTick([callback])

用法:将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它,然后等待 DOM 更新。它跟全局方法 Vue.nextTick 一样,不同的是回调的 this 自动绑定到调用它的实例上。

报错:

Cannot read property ‘setCheckedKeys’ of undefined"

这个错误是因为调用不到 setCheckedKeys 方法

可以看到以下代码,获取ref引用调用 getCheckedKeys 时,并不是 this.$refs['showRegionsTree'],而是 this.$refs['showRegionsTree'][0]

const ids = regions.split('|').filter(item => item.length > 0).map(item => parseInt(item))
if (this.$refs['showRegionsTree']) {this.$nextTick(() => {this.$refs['showRegionsTree'][0].setCheckedKeys(ids)})
} else {this.showRegions.selectedIds = ids
}

新增/编辑请求前需转换格式

报错:

Cannot read property ‘getCheckedKeys’ of undefined"

这个错误是因为调用不到 getCheckedKeys 方法

次处同样如此,在获取ref引用调用 getCheckedKeys 时,并不是 this.$refs['showRegionsTree'],而是 this.$refs['showRegionsTree'][0]

if (this.$refs['showRegionsTree']) {const ids = this.$refs['showRegionsTree'][0].getCheckedKeys()this.form.content[i].val = ids ? `|${ids.join('|')}|` : ''
}

http://www.ppmy.cn/news/785447.html

相关文章

Spring复习: (5) DefaultBeanDefinitionDocumentReader和BeanDefinitionParserDelegate

DefaultBeanDefinitionDocumentReader和BeanDefinitionParserDelegate 这两个类里定义了大量的静态变量&#xff0c;这些变量用来在xml配置文件中使用

移动硬盘突然断电导致坏道产生

买的移动硬盘才两天&#xff0c;就坏了&#xff0c;用了量产工具以及win自带的修复工具&#xff0c;坏道太多&#xff0c;返厂了。 我分析是由于通电中断电导致的&#xff0c;用完没有安全地删除硬件导致的&#xff0c;我这个笔记本比较奇怪&#xff0c;由于装了双系统&#xf…

移动硬盘坏掉怎么恢复数据

我是一名商贸公司的白领。每天最终的就是报表和客户&#xff0c;久而久之&#xff0c;积累了一顿的客户资料。有些时候u盘装不下&#xff0c;电脑不方便&#xff0c;所以后来就买了个移动硬盘。这样可以吧客户资料整合到一起&#xff0c;出差也不用担心了。但是所有的东西都是要…

移动硬盘格式化后数据还能恢复吗?

众所周知&#xff0c;在使用移动硬盘的过程中&#xff0c;会把很多重要的大文件备份起来&#xff0c;很多时候稍不注意就会出现操作错误&#xff0c;导致硬盘格式化和数据丢失。一旦发生我们将遭受巨大的损失。那么如果移动硬盘格式化后数据还能恢复吗?下面让我们来看看移动硬…

java之多线程(五)——线程死锁问题

什么是死锁问题 1、不同的线程分别占用对方需要的同步资源不放弃&#xff0c;都在等待对方放弃自己需要的同步资源&#xff0c;就形成了线程的死锁。 2、出现死锁后&#xff0c;不会出现异常&#xff0c;不会出现提示&#xff0c;知识所有线程都处于阻塞状态&#xff0c;无法继…

【在线文件管理】响应式文件管理AngularJS

目录 1.功能展示截图 2.实现代码 2.1HTML页面代码 2.2后台代码 2.2.1项目结构 2.2.2项目代码 其他问题 1.功能展示截图 项目中需要用到文件管理来自由控制文件的上传、下载、删除等&#xff0c;就想到做一个简单的在线文件管理功能。 支持在线编辑&#xff1a; 2.实现代…

android 各应用市场图标尺寸

应用商店APP介绍截图尺寸logo尺寸vivo请上传3-5张清晰截图。尺寸为竖图480*800&#xff0c;格式为jpg/png&#xff0c;每张图片尺寸一致&#xff0c;单张图片不超过2MB不低于256*256&#xff0c;不超过512 *512&#xff0c;大小50k以内&#xff0c;仅支持直角图标OPPO请上传3-5…

在华为FunsionCompute平台安装CentOS 7.6虚拟机

一、步骤描述 登录华为FunsionCompute平台上传镜像文件&#xff0c;创建虚拟机为虚拟机挂载镜像文件强制重启虚拟机&#xff0c;VNC登录安装CentOS7.6操作系统。安装步骤参考了https://blog.csdn.net/qq_32838955/article/details/104694948为服务器分配IP地址 二、具体步骤 …