vue实现表格录入
Vue 实现表格录入的方法
使用 Vue 实现表格录入功能可以通过多种方式完成,以下是一些常见的方法和实现步骤。
使用 v-for 动态渲染表格
通过 v-for 指令动态渲染表格行,结合 v-model 实现数据双向绑定。
<template>
<table>
<thead>
<tr>
<th>姓名</th>
<th>年龄</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr v-for="(item, index) in tableData" :key="index">
<td><input v-model="item.name" type="text"></td>
<td><input v-model="item.age" type="number"></td>
<td><button @click="removeRow(index)">删除</button></td>
</tr>
</tbody>
</table>
<button @click="addRow">添加行</button>
</template>
<script>
export default {
data() {
return {
tableData: [
{ name: '', age: '' }
]
}
},
methods: {
addRow() {
this.tableData.push({ name: '', age: '' })
},
removeRow(index) {
this.tableData.splice(index, 1)
}
}
}
</script>
使用 Element UI 表格组件
如果项目中使用 Element UI,可以通过 el-table 和 el-input 实现更强大的表格录入功能。
<template>
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="name" label="姓名">
<template #default="{ row }">
<el-input v-model="row.name"></el-input>
</template>
</el-table-column>
<el-table-column prop="age" label="年龄">
<template #default="{ row }">
<el-input v-model="row.age" type="number"></el-input>
</template>
</el-table-column>
<el-table-column label="操作">
<template #default="{ $index }">
<el-button @click="removeRow($index)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-button @click="addRow">添加行</el-button>
</template>
<script>
export default {
data() {
return {
tableData: [
{ name: '', age: '' }
]
}
},
methods: {
addRow() {
this.tableData.push({ name: '', age: '' })
},
removeRow(index) {
this.tableData.splice(index, 1)
}
}
}
</script>
使用 Vuex 管理表格数据
对于复杂场景,可以通过 Vuex 集中管理表格数据。
// store.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
tableData: [
{ name: '', age: '' }
]
},
mutations: {
ADD_ROW(state) {
state.tableData.push({ name: '', age: '' })
},
REMOVE_ROW(state, index) {
state.tableData.splice(index, 1)
},
UPDATE_ROW(state, { index, key, value }) {
state.tableData[index][key] = value
}
}
})
<template>
<table>
<tbody>
<tr v-for="(item, index) in $store.state.tableData" :key="index">
<td><input :value="item.name" @input="updateField(index, 'name', $event.target.value)"></td>
<td><input :value="item.age" @input="updateField(index, 'age', $event.target.value)" type="number"></td>
<td><button @click="removeRow(index)">删除</button></td>
</tr>
</tbody>
</table>
<button @click="addRow">添加行</button>
</template>
<script>
export default {
methods: {
addRow() {
this.$store.commit('ADD_ROW')
},
removeRow(index) {
this.$store.commit('REMOVE_ROW', index)
},
updateField(index, key, value) {
this.$store.commit('UPDATE_ROW', { index, key, value })
}
}
}
</script>
实现表单验证
结合 Vuelidate 或 Element UI 表单验证功能,确保录入数据的有效性。
<template>
<el-form :model="tableData" :rules="rules" ref="form">
<el-table :data="tableData">
<el-table-column prop="name" label="姓名">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.name`" :rules="rules.name">
<el-input v-model="row.name"></el-input>
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
</template>
<script>
export default {
data() {
return {
tableData: [{ name: '' }],
rules: {
name: [
{ required: true, message: '请输入姓名', trigger: 'blur' }
]
}
}
}
}
</script>
通过以上方法,可以灵活实现 Vue 中的表格录入功能,根据项目需求选择合适的方案。







