在 Element UI 的 el-table
组件中,可以使用 scoped-slot
来自定义表格列的渲染方式。通过在 el-table-column
组件中定义 scopedSlots
属性,可以在表格中渲染自定义的组件或 HTML 代码。结合 v-if
和 v-else
指令,可以实现在点击表格字段时出现输入框的效果。下面是一个示例:handlebarsCopy
<template>
<el-table :data="tableData">
<el-table-column prop="name" label="姓名">
<template #default="{row}">
<span v-if="!row.editable">{{ row.name }}</span>
<el-input v-model="row.name" v-else></el-input>
</template>
</el-table-column>
<el-table-column prop="age" label="年龄">
<template #default="{row}">
<span v-if="!row.editable">{{ row.age }}</span>
<el-input v-model.number="row.age" v-else></el-input>
</template>
</el-table-column>
<el-table-column label="操作">
<template #default="{row}">
<el-button type="danger" @click="deleteRow(row)">删除</el-button>
<el-button v-if="!row.editable" @click="editRow(row)">编辑</el-button>
<el-button v-else @click="saveRow(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: {
editRow(row) {
row.editable = true
},
saveRow(row) {
row.editable = false
},
deleteRow(row) {
const index = this.tableData.indexOf(row)
if (index !== -1) {
this.tableData.splice(index, 1)
}
}
}
}
</script>
在上面的示例中,我们使用了 el-table
组件渲染表格数据,并使用了 el-table-column
组件渲染表格列。在表格列中,我们使用了 scoped-slot
来自定义渲染方式,使用了 v-if
和 v-else
指令来根据 editable
属性的值切换组件的显示。在表格列中的操作列中,我们使用了 v-if
和 v-else
指令根据 editable
属性的值切换按钮的显示。在组件的 data
选项中,我们定义了表格数据,并在每行数据中添加了一个 editable
属性,用于判断当前行是否处于编辑状态。在组件的 methods
中,我们定义了 editRow
、saveRow
和 deleteRow
三个方法。其中,editRow
方法用于将指定行的 editable
属性设置为 true
,以便在点击时将输入框显示出来。saveRow
方法用于将指定行的 editable
属性设置为 false
,以便在保存后将输入框隐藏。deleteRow
方法用于删除指定行的数据。
需要注意的是,在双击表格行时,需要将 editable
属性添加到表格数据中,并将其初始值设置为 false
。最后,在表格列中的输入框组件中,需要使用 .number
修饰符将输入框的值转换为数字类型。