在许多应用中,我们可能会遇到根据不同场景动态生成表单的需求。这种需求通常需要根据不同的条件生成不同的输入字段和控件,比如选择框、文本框、日期选择器等。本功能展示了如何使用 UNIAPP 实现一个动态表单生成与提交功能,根据后端返回的数据生成表单,并允许用户输入并提交数据。
功能描述
该功能允许用户:
- 根据后端返回的数据动态生成表单。
- 支持不同类型的输入控件:文本框、单选框、复选框、日期选择器等。
- 实现表单验证,确保数据合法。
- 提交表单时将填写的数据发送到后端。
技术栈
- 动态生成表单:使用
v-for
循环动态生成表单控件。 - 表单验证:使用简单的前端验证确保用户输入的数据格式正确。
- 表单提交:使用
uni.request
发送数据到后端。
1. 前端代码实现
页面实现
<!-- pages/dynamicForm/dynamicForm.vue -->
<template>
<view class="container">
<view class="title">{
{ $t('dynamicFormTitle') }}</view>
<form @submit.prevent="submitForm">
<view v-for="(field, index) in formFields" :key="index" class="form-item">
<view v-if="field.type === 'text'">
<text>{
{ field.label }}</text>
<input v-model="formData[field.name]" :placeholder="field.placeholder" type="text" />
</view>
<view v-if="field.type === 'select'">
<text>{
{ field.label }}</text>
<picker v-model="formData[field.name]" :range="field.options" @change="handleSelectChange">
<view class="picker">
{
{ formData[field.name] || field.placeholder }}
</view>
</picker>
</view>
<view v-if="field.type === 'radio'">
<text>{
{ field.label }}</text>
<view class="radio-group">
<label v-for="(option, i) in field.options" :key="i">