element ui 这使用@cell-click的事件,修改一行中某一这个字段的数据后,表格没有实时刷新,如何实时刷新数据,还能让滚动条不重置
时间: 2024-10-20 15:09:38 浏览: 48
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
5星 · 资源好评率100%
Element UI 中的表格组件 `el-table` 使用 `@cell-click` 事件通常是在单击单元格时触发,如果你想在修改某个字段后实时刷新表格并且保持滚动位置,可以按照以下步骤操作:
1. **监听表单变更**: 当你在编辑行时,需要监听表单元素(如 `input`、`textarea` 等)的变化,比如使用 `v-model` 的双向绑定,当字段值改变时。
```vue
<template>
<el-form-item label="字段名" prop="fieldName">
<el-input v-model="row(fieldName)" @input="updateField"></el-input>
</el-form-item>
</template>
<script>
export default {
data() {
return {
// 表格数据
tableData: [],
// 缓存当前选中行的原始数据
cachedRow: {},
};
},
methods: {
updateField(value) {
// 修改缓存的原始数据
this.cachedRow.fieldName = value;
// 更新表格数据
this.$set(this.tableData.find(item => item.id === this.currentRowId), 'fieldName', value);
// 刷新表格,可根据实际情况选择异步操作
this.refreshTable();
},
refreshTable() {
// 如果你想同步更新,可以在这里直接操作;如果涉及到远程API,使用axios或其他库,并在回调里完成刷新
// 如果表格很大,可以使用`v-loading` 或者分页加载来避免滚动条重置
},
cellClick(row, column, event) {
// 在这里保存当前行的id或索引
this.currentRowId = row.id; // 或其他唯一标识符
},
},
};
</script>
```
**滚动位置保持**:
为了保持滚动位置,你需要在刷新数据之后,找到之前点击的那行并设置其 `offsetTop` 属性,使其保持在原来的位置。这可以在表格组件的 `mounted()` 函数或者刷新方法内部实现。
```javascript
// ...
methods: {
...,
refreshTable() {
this.$nextTick(() => {
const targetRow = this.tableData.find(item => item.id === this.currentRowId);
if (targetRow) {
this.$refs.tableView.scrollToRow(targetRow, { smooth: true });
}
});
},
// ...
}
// ...
```
阅读全文