element ui同时保存多个tab页面的表单内容

使用element-ui中tab页时在存在多个tab页面是如何获取全部tab页面的内容

 在项目阶段中碰见了这样一个问题,子组件是动态渲染出的若干个tab页面,可以来回切换,然后在父组件有一个提交按钮,点击之后,需要把这几个tab页中的数据合并到一起通过接口发送出去,看了几篇文章之后感觉不是很明白,于是就自己试着写了一个
 说一下我这边的情况,是有若干个tab页,每个页面都有若干个table表格,需要点击提交之后吧tab页中的数据集合到一起
//在子组件中
onsubmit(){
	return {
a:this.form1,
b:this.form2,
c:this.form3 // 这里的form就是获取到的表格的数据
}
}
//在父组件中
<html>
<el-button @click="save">save</el-button>
<!-- 子组件标签-->
<el-tabs>
<el-tab-pane >
<child ref="cond"></child>
</el-tab-pane>
</el-tabs>
</html>


save(){
// 保存动作,获取所有tab页内的表单数据
var obj  = {} // 定义一个空的对象,去接收值
obj = this.arrayList.map(index=>{
	return {...this.$ref.cond[index].onsubmit()}
})
console.log(obj)
}

基本的逻辑就是这个样子,需要注意的是,我们使用tab页的时候,子组件实际上会被渲染成多个,通过ref去调用子组件的方法的时候需要注意,此时的ref对应的是一个数组的形式,因此需要给ref对应的你的ref加下标才能取到对应的属性

小结

随笔记了一下这个方法,思路大概就是这样的,代码比较不完整。有不合理的地方希望各位指正

好的,下面是一个简单的示例代码: ```html <template> <div> <el-tabs v-model="activeTab"> <el-tab-pane label="表格"> <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 prop="gender" label="性别"></el-table-column> </el-table> </el-tab-pane> <el-tab-pane label="表单"> <el-form ref="form" :model="formData" :rules="rules" label-width="80px"> <el-form-item label="姓名" prop="name"> <el-input v-model="formData.name"></el-input> </el-form-item> <el-form-item label="年龄" prop="age"> <el-input v-model.number="formData.age"></el-input> </el-form-item> <el-form-item label="性别" prop="gender"> <el-radio-group v-model="formData.gender"> <el-radio label="男"></el-radio> <el-radio label="女"></el-radio> </el-radio-group> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> <el-button @click="resetForm">重置</el-button> </el-form-item> </el-form> </el-tab-pane> </el-tabs> </div> </template> <script> export default { data() { return { activeTab: '表格', tableData: [ { name: '张三', age: 20, gender: '男' }, { name: '李四', age: 25, gender: '女' }, { name: '王五', age: 30, gender: '男' }, ], formData: { name: '', age: '', gender: '', }, rules: { name: [ { required: true, message: '请输入姓名', trigger: 'blur' }, ], age: [ { required: true, message: '请输入年龄', trigger: 'blur' }, { type: 'number', message: '年龄必须为数字值', trigger: 'blur' }, { validator: this.checkAge, trigger: 'blur' }, ], gender: [ { required: true, message: '请选择性别', trigger: 'change' }, ], }, }; }, methods: { submitForm() { this.$refs.form.validate(valid => { if (valid) { console.log('表单验证通过'); } else { console.log('表单验证失败'); } }); }, resetForm() { this.$refs.form.resetFields(); }, checkAge(rule, value, callback) { if (value < 18 || value > 60) { callback(new Error('年龄必须在18岁到60岁之间')); } else { callback(); } }, }, }; </script> ``` 在这个示例,我们使用了 Element UI 提供的 `el-tabs` 和 `el-tab-pane` 组件来实现标签页切换功能。在第一个标签页,我们使用了 `el-table` 和 `el-table-column` 组件来展示表格数据;在第二个标签页,我们使用了 `el-form`、`el-form-item`、`el-input` 和 `el-radio-group` 组件来实现表单功能。同时,在表单我们还使用了 Element UI 提供的表单验证功能,通过 `rules` 属性来设置表单验证规则。在表单验证通过后,我们可以将表单数据提交到后端进行处理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值