el-table中更改一行的数据其他数据也会跟着改变
时间: 2024-02-17 21:05:19 浏览: 158
如果在`el-table`中更改一行的数据,其他数据也会跟着改变,通常情况下这是因为您的数据是响应式的,即多个引用指向同一个数据对象,修改其中一个引用的数据会影响到其他引用的数据。
为了解决这个问题,您可以使用深拷贝来复制数据对象,这样每个引用都指向不同的数据对象,修改其中一个数据对象不会影响其他数据对象。
在 JavaScript 中,可以使用`JSON.parse(JSON.stringify())`方法来进行深拷贝。以下是一个示例代码:
```html
<template>
<el-table :data="tableData">
<el-table-column prop="name" label="名称"></el-table-column>
<el-table-column prop="age" label="年龄"></el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button @click="updateData(scope.row)">修改</el-button>
</template>
</el-table-column>
</el-table>
</template>
<script>
export default {
data() {
return {
tableData: [
{ name: '张三', age: 20 },
{ name: '李四', age: 25 },
{ name: '王五', age: 30 }
]
}
},
methods: {
updateData(row) {
// 找到需要更新的数据对象
const updatedData = { name: '赵六', age: 35 }
const index = this.tableData.indexOf(row)
// 使用深拷贝复制数据对象
const newData = JSON.parse(JSON.stringify(this.tableData[index]))
// 对数据进行修改
Object.assign(newData, updatedData)
// 替换原始数据中的数据对象
this.tableData.splice(index, 1, newData)
}
}
}
</script>
```
在上述示例中,我们使用`JSON.parse(JSON.stringify())`方法进行深拷贝,复制了需要更改的数据对象。然后,我们对复制的数据对象进行修改。最后,我们使用`splice`方法替换原始数据中的数据对象。这样,每个数据对象都是独立的,修改其中一个数据对象不会影响其他数据对象。
阅读全文