elementUI的table表格改变数据不更新问题解决

 更新时间:2022年02月24日 10:50:16   作者:三个木马人  
最近在做vue的项目时发现了一个问题,今天就来解决一下,本文主要介绍了elementUI的table表格改变数据不更新问题解决,感兴趣的可以了解一下

预期效果:点击输入框旁边的图标,输入框变为可输入状态;这里控制输入的 editable 字段不是 data 原有的属性,也不是 data 赋值时就存在的字段。

在这里插入图片描述

问题原因:在 Vue 实例创建时,以及 data 赋值时 editable 并未声明,因此就没有被Vue转换为响应式的属性,自然就不会触发视图的更新。

解决方法:

1、给 data 赋值前把 editable 属性添加到数组里

这里就不贴代码了,大概思路就是:获取到列表信息之后缓存在一个临时数组里(不可以是 data 里面定义好的对象),循环遍历列表信息,给每一条数据都添加一个属性 editable 值为 false,然后再把处理过的列表信息赋值给 data 。

2、使用: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 style="display: flex;">
    			<el-input :disabled='!scope.row.editable' style="margin-right: 10px;"></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 渲染,滚动条会回到顶部,想查看被操作的输入框需要重新把滚动条拉到最下面;这样体验非常不好。如果有这样的场景推荐使用下面的方法。

3、使用 $set

$set 可以让动态的给 data 添加响应式的属性,让 editable 变为响应式的,就可以直接触发页面更新。

<el-table :data="data" stripe border>
	<el-table-column align="center" label="字段中文名称">
		<template slot-scope="scope">
    		<div style="display: flex;">
    			<el-input :disabled='!scope.row.editable' style="margin-right: 10px;"></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表格改变数据不更新问题解决的文章就介绍到这了,更多相关element table数据不更新内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue中{{}},v-text和v-html区别与应用详解

    vue中{{}},v-text和v-html区别与应用详解

    这篇文章主要介绍了vue中{{}},v-text和v-html区别与应用详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • 浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件

    浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件

    本篇文章主要介绍了vue自定义全局组件并通过全局方法 Vue.use() 使用该组件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Vue Router history模式的配置方法及其原理

    Vue Router history模式的配置方法及其原理

    这篇文章主要介绍了Vue Router history模式的配置方法及其原理,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • vue使用swiper实现中间大两边小的轮播图效果

    vue使用swiper实现中间大两边小的轮播图效果

    这篇文章主要介绍了vue使用swiper实现中间大两边小的轮播图效果,本文分步骤通过实例代码讲解的非常详细,需要的朋友可以参考下
    2019-11-11
  • 解决Vue路由导航报错:NavigationDuplicated: Avoided redundant navigation to current location

    解决Vue路由导航报错:NavigationDuplicated: Avoided redundant navig

    这篇文章主要给大家介绍了关于解决Vue路由导航报错:NavigationDuplicated: Avoided redundant navigation to current location的相关资料,这是最近做项目时候遇到的一个问题,现将解决办法分享出来,需要的朋友可以参考下
    2023-01-01
  • vue页面批量引入组件的操作代码

    vue页面批量引入组件的操作代码

    这篇文章主要介绍了vue页面批量引入组件,本文结合示例代码给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • 如何在在Vue3中使用markdown 编辑器组件

    如何在在Vue3中使用markdown 编辑器组件

    vue3发布正式版不久,生态还没完全发展起来,目前支持vue3的开源markdown编辑器组件基本上也寥寥无几,向大家推荐一个很好用的v-md-editor 组件,组件功能很强大,文档也比较详细。该文章只介绍组件的常用功能,更多高级的功能可以参考官方文档。
    2021-05-05
  • Element UI Dialog对话框改成固定高度超出部分滚动条滚动

    Element UI Dialog对话框改成固定高度超出部分滚动条滚动

    这篇文章主要给大家介绍了关于Element UI Dialog对话框改成固定高度超出部分滚动条滚动的相关资料,el-dialog默认高度是自由拉伸的,当内容超过屏幕时会出现滚动条,按钮和标题都会随着滚动,用户体验不好,需要的朋友可以参考下
    2024-05-05
  • vue中使用v-if,v-else来设置css样式的步骤

    vue中使用v-if,v-else来设置css样式的步骤

    我们在使用vue项目开发时,v-if是使用的非常多的,在这里我们谈谈如何使用v-i来绑定修改css样式,使用的主要是双向数据绑定,即通过改变他的状态来改变他的样式,这篇文章主要介绍了vue中如何使用v-if,v-else来设置css样式,需要的朋友可以参考下
    2023-03-03
  • Element Dialog对话框的使用示例

    Element Dialog对话框的使用示例

    这篇文章主要介绍了Element Dialog对话框的使用示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07

最新评论