如何使用 vxe-table 实现编辑默认,所有控件一直保持编辑状态,不是切换编辑状态和查看状态
如何使用 vxe-table 实现编辑默认,所有控件一直保持编辑状态,不是切换编辑状态和查看状态,要实现这个功能首先是关闭内置的编辑功能,使用自定义 default 默认插槽模板的方式。
全部单元格直接显示编辑模式
该方式的渲染性能极差,适合少量数据的场景使用

<template>
<div>
<vxe-table
border
show-overflow
height="400"
:data="tableData">
<vxe-column type="seq" width="70"></vxe-column>
<vxe-column field="name" title="Name" min-width="200">
<template #default="{ row }">
<vxe-input v-model="row.name"></vxe-input>
</template>
</vxe-column>
<vxe-column field="nickname" title="Nickname" width="300">
<template #default="{ row }">
<vxe-input v-model="row.nickname"></vxe-input>
</template>
</vxe-column>
<vxe-column field="role" title="Role" width="300">
<template #default="{ row }">
<vxe-input v-model="row.role"></vxe-input>
</template>
</vxe-column>
<vxe-column field="age" title="年龄" width="140">
<template #default="{ row }">
<vxe-number-input v-model="row.age"></vxe-number-input>
</template>
</vxe-column>
</vxe-table>
</div>
</template>
<script setup>
import { ref } from 'vue'
const tableData = ref([
{ id: 10001, name: 'Test1', nickname: '', role: 'Develop', age: null },
{ id: 10002, name: 'Test2', nickname: '', role: 'Test', age: 41 },
{ id: 10003, name: 'Test3', nickname: '', role: 'PM', age: 58 },
{ id: 10004, name: 'Test4', nickname: '', role: 'Develop', age: 37 },
{ id: 10005, name: 'Test5', nickname: '', role: 'Test', age: 20 },
{ id: 10006, name: 'Test6', nickname: '', role: 'Test', age: 39 },
{ id: 10007, name: 'Test7', nickname: '', role: 'Develop', age: 22 },
{ id: 10008, name: 'Test8', nickname: '', role: 'Develop', age: 29 },
{ id: 10009, name: 'Test9', nickname: '', role: 'Test', age: 22 }
])
</script>
高性能单行编辑模式
该方式配置简单,渲染性能极致流畅,适用于所有场景使用,包括虚拟滚动的大数据量场景。

<template>
<div>
<vxe-grid v-bind="gridOptions"></vxe-grid>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue'
import { VxeUI } from 'vxe-table'
const sexEditRender = reactive({
name: 'VxeSelect',
options: [
{ label: '女', value: 'Women' },
{ label: '男', value: 'Man' }
]
})
const gridOptions = reactive({
border: true,
showOverflow: true,
showHeaderOverflow: true,
showFooterOverflow: true,
height: 600,
loading: false,
editConfig: {
trigger: 'click',
mode: 'cell' // 'row'
},
virtualYConfig: {
enabled: true,
gt: 0
},
columns: [
{ type: 'seq', width: 70 },
{ field: 'name', title: 'Name', editRender: { name: 'VxeInput' } },
{ field: 'nickname', title: 'Nickname', editRender: { name: 'VxeInput' } },
{ field: 'role', title: 'Role', editRender: { name: 'VxeInput' } },
{ field: 'age', title: 'Age', editRender: { name: 'VxeInput' } },
{ field: 'sex', title: 'Sex', editRender: sexEditRender },
{ field: 'date', title: 'Date', editRender: { name: 'VxeDatePicker' } },
{ field: 'action', title: '操作', width: 100, slots: { default: 'action' } }
],
data: []
})
// 模拟行数据
const loadList = (size = 200) => {
gridOptions.loading = true
setTimeout(() => {
const dataList = []
for (let i = 0; i < size; i++) {
dataList.push({
id: i,
name: `名称${i}`,
nickname: '',
role: `角色${i}`,
age: '18',
sex: '',
date: ''
})
}
gridOptions.loading = false
gridOptions.data= dataList
}, 350)
}
loadList(500)
</script>
浙公网安备 33010602011771号