用element-plus写一个编辑表格使当前行变成input框,鼠标离开时,触发弹出框
时间: 2024-04-05 07:29:26 浏览: 66
可以参考以下代码实现:
```vue
<template>
<div>
<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 #default="{ row }">
<el-button @click="editRow(row)">编辑</el-button>
</template>
</el-table-column>
</el-table>
<el-dialog :visible.sync="dialogVisible">
<el-form ref="form" :model="editData">
<el-form-item label="姓名" prop="name">
<el-input v-model="editData.name"></el-input>
</el-form-item>
<el-form-item label="年龄" prop="age">
<el-input v-model.number="editData.age"></el-input>
</el-form-item>
</el-form>
<div slot="footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="saveEdit">确 定</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { ref } from 'vue'
import { ElTable, ElTableColumn, ElButton, ElDialog, ElForm, ElFormItem, ElInput } from 'element-plus'
export default {
components: { ElTable, ElTableColumn, ElButton, ElDialog, ElForm, ElFormItem, ElInput },
data() {
return {
tableData: [
{ name: '张三', age: 20 },
{ name: '李四', age: 25 },
{ name: '王五', age: 30 }
],
editData: {},
dialogVisible: false
}
},
methods: {
editRow(row) {
this.editData = Object.assign({}, row)
this.$refs.form.clearValidate()
this.dialogVisible = true
},
saveEdit() {
this.$refs.form.validate((valid) => {
if (valid) {
const index = this.tableData.findIndex(item => item === this.editData)
this.tableData.splice(index, 1, this.editData)
this.dialogVisible = false
}
})
}
}
}
</script>
```
以上代码中,我们使用了 element-plus 提供的表格、按钮、对话框、表单和输入框等组件,通过绑定数据和事件来实现编辑表格的功能。具体实现步骤如下:
1. 在模板中使用 el-table 组件渲染表格,并使用 el-table-column 组件定义表格列,其中第三列使用了插槽和 el-button 组件来实现编辑按钮。
2. 在表格的编辑按钮点击事件中,调用 editRow 方法,并将当前行的数据保存到 editData 变量中,然后清空表单的校验结果,并显示编辑对话框。
3. 在编辑对话框中使用 el-form 和 el-form-item 组件来定义表单项,然后使用 el-input 组件和 v-model 指令来绑定编辑数据。
4. 在编辑对话框的确定按钮点击事件中,调用 saveEdit 方法,并使用 el-form 的 validate 方法进行表单校验,如果校验通过,则更新表格数据并关闭编辑对话框。
需要注意的是,我们在 el-input 组件上使用了 v-model.number 指令来将年龄属性绑定为数字类型,这样在保存数据时才能正确计算年龄的值。另外,我们还使用了 Object.assign 方法来复制当前行的数据,避免直接修改原始数据造成不必要的副作用。
阅读全文