这篇文章主要介绍“elementUI的table表格改变数据不更新问题如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“elementUI的table表格改变数据不更新问题如何解决”文章能帮助大家解决问题。
预期效果:点击输入框旁边的图标,输入框变为可输入状态;这里控制输入的 editable 字段不是 data 原有的属性,也不是 data 赋值时就存在的字段。
问题原因:在 Vue 实例创建时,以及 data 赋值时 editable 并未声明,因此就没有被Vue转换为响应式的属性,自然就不会触发视图的更新。
解决方法:
给 data 赋值前把 editable 属性添加到数组里
这里就不贴代码了,大概思路就是:获取到列表信息之后缓存在一个临时数组里(不可以是 data 里面定义好的对象),循环遍历列表信息,给每一条数据都添加一个属性 editable 值为 false,然后再把处理过的列表信息赋值给 data 。
使用:key 或者 v-if
修改绑定在 table 上面的 key 值,可以触发 table 的重新渲染,这样就可以把修改后的 data 在表格里面更新渲染。
<el-table :data="data" :key='num' stripe border><el-table-column align="center" label="字段中文名称"><template slot-scope="scope"> <div > <el-input :disabled='!scope.row.editable' ></el-input> <el-button @click='changeEdit(scope.row)' type='text' icon="el-icon-edit-outline"></el-button> </div> </template> </el-table-column></el-table>export default{data(){return{num:0,data:[]}},methods:{changeEdit(row){//每次点击图标 key 自动加一row.editable = true;num++;}}}
这种方法有一个问题:给 table 添加一个默认高度,这个时候数据比较多的话会出现滚动条;当滚动条拉到下面,点击图标让对应的输入框可编辑,同时触发 table 渲染,滚动条会回到顶部,想查看被操作的输入框需要重新把滚动条拉到最下面;这样体验非常不好。如果有这样的场景推荐使用下面的方法。
使用 $set
$set 可以让动态的给 data 添加响应式的属性,让 editable 变为响应式的,就可以直接触发页面更新。
<el-table :data="data" stripe border><el-table-column align="center" label="字段中文名称"><template slot-scope="scope"> <div > <el-input :disabled='!scope.row.editable' ></el-input> <el-button @click='changeEdit(scope.$index,scope.row)' type='text' icon="el-icon-edit-outline"></el-button> </div> </template> </el-table-column></el-table>export default{data(){return{num:0,data:[]}},methods:{changeEdit(index,row){row.editable = true; this.$set(this.data,index,row);}}}
根据上面的方法延伸 :当 vue 能够检测到数组的变化,触发更新。
changeEdit(index,row){row.editable = true; this.data.splice(1,0);}
关于“elementUI的table表格改变数据不更新问题如何解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。