vue2子传父,点击保存,父中的el-table中选中的行直接显示新的值,替换掉旧的值,请写出相关代码
时间: 2024-02-16 21:04:12 浏览: 63
在子组件中,当点击保存按钮时,需要将新的行数据和旧的行数据进行对比,找到需要替换的行数据,并将新的数据替换掉旧的数据。可以按照以下步骤进行:
1. 在子组件中定义一个选中行的数组,用于存储选中的行数据:
```javascript
data() {
return {
selectedRows: []
}
},
```
2. 监听 el-table 的 selection-change 事件,将选中的行数据保存到 selectedRows 数组中:
```html
<el-table
ref="table"
:data="tableData"
@selection-change="handleSelectionChange">
...
</el-table>
```
```javascript
methods: {
handleSelectionChange(selection) {
this.selectedRows = selection
}
}
```
3. 在子组件中定义一个保存按钮,点击该按钮后将选中行的数据通过 $emit 方法发送给父组件:
```html
<template>
<div>
<el-table
ref="table"
:data="tableData"
@selection-change="handleSelectionChange">
...
</el-table>
<el-button @click="saveSelectedRows">保存</el-button>
</div>
</template>
```
```javascript
methods: {
saveSelectedRows() {
this.$emit('save-selected-rows', this.selectedRows)
}
}
```
4. 在父组件中监听子组件发出的 save-selected-rows 事件,并处理选中行的数据:
```html
<template>
<div>
<child-component @save-selected-rows="handleSaveSelectedRows"></child-component>
<el-table :data="tableData">
...
</el-table>
</div>
</template>
```
```javascript
data() {
return {
tableData: []
}
},
methods: {
handleSaveSelectedRows(selectedRows) {
this.tableData = this.tableData.map(row => {
if (selectedRows.find(selectedRow => selectedRow.id === row.id)) {
// 当前行被选中,需要替换成新的数据
return selectedRows.find(selectedRow => selectedRow.id === row.id)
} else {
// 当前行未被选中,不需要替换
return row
}
})
}
}
```
假设 tableData 的数据结构如下:
```javascript
[
{ id: 1, name: '张三', age: 20 },
{ id: 2, name: '李四', age: 22 },
{ id: 3, name: '王五', age: 25 },
...
]
```
当用户在子组件中选择了行数据后,点击保存按钮,就可以将选中的行数据传递给父组件进行处理,父组件中的 el-table 就可以直接显示选中的行数据,替换掉旧的数据。其中,通过 map 方法对 tableData 进行遍历,对每一行数据进行判断,如果当前行被选中,就返回新的数据,否则返回旧的数据。这样,就可以实现将选中的行数据替换掉旧的数据,同时也可以保留未被选中的行数据。
阅读全文