如何使用 vxe-table 实现编辑默认,所有控件一直保持编辑状态,不是切换编辑状态和查看状态

如何使用 vxe-table 实现编辑默认,所有控件一直保持编辑状态,不是切换编辑状态和查看状态,要实现这个功能首先是关闭内置的编辑功能,使用自定义 default 默认插槽模板的方式。

https://vxetable.cn

全部单元格直接显示编辑模式

该方式的渲染性能极差,适合少量数据的场景使用

图片

<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>

https://gitee.com/x-extends/vxe-table

posted @ 2026-01-12 12:08  放飞的云  阅读(5)  评论(0)    收藏  举报