欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解Vue返回值动态生成表单及提交数据的办法

程序员文章站 2022-03-02 08:57:23
目录主要解决的问题一、后端返回的数据,提交到后端的数据格式如下:二、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>

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!