####el-table 树形表格 如何让某一行默认展开 具体需求是在对表格做了增加\删除操作,对应的表格行要自动展开。element的官方文档给出了对应的设置参数,但是应用到我们的数据中并没有效果,经过多次测试、实验找到了一种解决办法,这里贴出来大家分享,如果你有更好的办法,可以私信交流~
解决办法 核心是 row-key、expand-row-keys属性 特别要注意的是row-key传入的是一个Function(row),而expand-row-keys传入的是一个数组,元素的值是要展开的row的key。 但是这里即使设置了,也没有实现展开的效果,这里给大家还需要做一件事情,就是对你需要默认展开那一行的td>div中el-table__expand-icon 这个class 执行click()事件。
el-table-column使用v-if导致数据渲染错乱
编辑表格时,使用v-if控制列表的显隐,发现会有随机列位置错乱与数据错乱现象。 这是因为在v-for或者v-if切换标签时,多个相同的标签被渲染,如果不添加key来区分则会出现复用的情况。而原本这些标签每一个都是独立的,于是需要添加key来做区分! 表格是element-ui通过循环产生的,而vue在dom重新渲染时有一个性能优化机制,就是相同dom会被复用,这就是问题所在,所以,通过key去标识一下当前行是唯一的,不许复用,就行了。
<el-table-column
v-if="operate_type==2"
:key="Math.random()"
prop="table"
label="table"
/>
注:这里有个大坑,若是表格上面有输入框,表格会一直闪烁
resetFields()方法重置表单后无法再次编辑
添加新数据时加了重置方法,但是点击调用resetFields(),再次编辑数据无法写入input中。查看Form 表单用法发现resetFields()对整个表单进行重置,将所有字段值重置为初始值并移除校验结果没有追溯到底层代码,这里还需要再次研究,如果又小伙伴知道,麻烦指导下。
解决办法 移除表单项的校验结果,清空运行内存中的数据的的值。
// 重置表格数据
resetForm(formName) {
this.$refs[formName].clearValidate();
this.product_data = {
name:'',
code:'',
priority:'',
bucket:'',
description:''
};
},
修改数据某一条表单数据时,是确定还是取消,表格的数据也会跟随修改
一直以为是传错数据或是在某个位置改掉了内存中的数据,找了半天也没有看到修改原始数据的代码,最后发现是数据**深浅拷贝**的问题。因为row是Object对象类型,如果直接赋值的话this.product_data = row),就变成了浅拷贝,复制的是地址,导致在表单中改变值的时候table中的数据也跟着改变,所以要进行深拷贝,利用json就可以了,改成下面就行了。
// 编辑数据
handleUpdateAction(index, row) {
this.dialogVisible = true;
this.dialogTitle = "编辑产品";
this.isEdit = true;
this.product_data = JSON.parse(JSON.stringify(row))
},
补充:js中有两种不同的数据类型,一个是基本类型,一个是引用类型,其中Object是引用类型浅拷贝复制的是引用,深拷贝复制的是实体,简单的说,就是如果b复制a,现在修改b,如果a跟着改变,这种就是浅拷贝如果a不变,就是深拷贝。
[Vue warn]: You may have an infinite update loop in a component render function. 这是一个死循环的报错
数据导致组件呈现函数中可能有无限更新循环,这是首先定位你的问题点,查找是否有循环的数据。 我的问题是添加数据 使用到了from表单,重置表单时发生的报错。我在移除该表单项的校验结果的同时,也对表单的数据做了置空处理,但是表单中又涉及到了checkbox,猜测校验时插件内部有循环机制,造成了死循环。