详解Vue返回值动态生成表单及提交数据的办法
程序员文章站
2022-06-09 22:42:05
目录主要解决的问题一、后端返回的数据,提交到后端的数据格式如下:二、vue前端代码如下:总结主要解决的问题1、vue在循环的时候需要动态绑定不同的v-model;vue动态的表单,数据怎么绑定呢?2、...
主要解决的问题
1、vue在循环的时候需要动态绑定不同的v-model;vue动态的表单,数据怎么绑定呢?
2、动态表单上所有name属性对应的键值对的形式提交到后端
一、后端返回的数据,提交到后端的数据格式如下:
// 后端返回的数据,根据返回类型用对应的组件 [ { "componenttype": "input", "componentname": "username", "required": "1", // 提交时是否要必须填写 "name": "姓名", }, { "componenttype": "radio", "componentname": "sex", "required": "1", "name": "性别", "options": [ { "name": "男", "value": "0000" }, { "name": "女", "value": "1111" } ] } ] // 提交到服务器的数据格式 { username: '我的姓名', sex: '0000' // 对应”男“ }
二、vue前端代码如下:
<template> <div class="page-container"> <div class="dynamic-content"> <div v-for="(item,idx) in infolist" :key="idx"> <input class="common-input" v-model="modelitems[idx]" v-if="item.componenttype=='input'"> <van-radio-group v-model="modelitems[idx]" direction="horizontal" v-if="item.componenttype=='radio'"> <van-radio :name="itemradio.value" v-for="itemradio in item.options" :key="itemradio.value"> {{itemradio.name}} </van-radio> </van-radio-group> </div> <div class="common-btn" @click="clicksubmit">提交数据</div> </div> </div> </template> <script> import vue from 'vue' import { getlistdata } from '@/api/home' import { radiogroup, radio } from 'vant' vue.use(radio).use(radiogroup) export default { data() { return { modelitems: {}, // vue在循环的时候需要动态绑定不同的v-model infolist: [] } }, mounted() { this.formkeyarr = [] this.getlist() }, methods: { getlist() { getlistdata() .then((res) => { const infolistdata = res.infolist this.infolist = infolistdata infolistdata.foreach((item, index) => { // 保存属性name和是否必填,后续提交数据用到 // { name: 'username', type: 1 }, { name: 'sex', type: 1} this.formkeyarr.push({ name: item.componentname, type: item.required }) }) }) .catch(() => { }) }, clicksubmit() { const postparams = {} // 提交的数据 let iscansubmit = true this.formkeyarr.foreach((item, index) => { console.log('item=', item) if (item.type === '1' && !this.modelitems[index]) { // 所有require必须的标记符 // 请先填写完成, toast请填写完整 iscansubmit = false } postparams[item['name']] = this.modelitems[index] }) if (iscansubmit) { // 可以提交数据 // 可以拿到提交表单数据 // { username: '我的姓名', sex: '0000' // 对应”男“ } console.log('postparams=', postparams) } } } } </script> <style lang="scss"> </style>
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!