uniapp的动态表单实现

目录

1.说明

2.示例

3.总结


1.说明

①在 formData 中定义个数组变量用来接受同一个字段的多个结果。

复制代码
dynamicFormData: {
	email: '',
	// domains 字段下会有多个结果
	domains: []
}

②使用 uni-forms-itemrules 属性定义单个表单域的校验规则。

复制代码
<uni-forms-item :label="item.label+' '+index" required
	:rules="[{'required': true,errorMessage: '域名项必填'}]" :key="item.id">
	...
</uni-forms-item>

name 需要动态指定,动态表单推荐使用 Array 类型,内容从左到右为绑定值的调用链。['domains',index,'value'] 等同于 dynamicFormData.domains[index].value

复制代码
<uni-forms-item 
	required
	:label="item.label+' '+index" 
	:name="['domains',index,'value']"
	:rules="[{'required': true,errorMessage: '域名项必填'}]" 
	:key="item.id"
	>
	...
</uni-forms-item>

④需要绑定值的组件的 v-model 也需要动态指定 dynamicFormData.domains[index].value

复制代码
<uni-forms-item 
	required
	:label="item.label+' '+index" 
	:name="['domains',index,'value']"
	:rules="[{'required': true,errorMessage: '域名项必填'}]" 
	:key="item.id"
	>
	<uni-easyinput v-model="dynamicFormData.domains[index].value" placeholder="请输入域名" />
</uni-forms-item>

2.示例

html层:

复制代码
			<div v-for="(item,index) in formData.parts">
				<uni-forms-item class="is-direction-top" :label="index == 0?'参与人':''" :required="index == 0"
					:rules="[{'required': true,errorMessage: '请输入参与人'}]" :key="item.id" :name="['parts',index,'value']">
					<template v-slot:label v-if="index > 0">
						<div></div>
					</template>
					<view class="dmc">
						<uni-easyinput v-model="formData.parts[index].value" placeholder="请输入参与人" />
						<uni-icons class="dmc-btn" v-if="!index" @click="addParts" size="30" type="plus"
							color="#666"></uni-icons>
						<uni-icons class="dmc-btn" v-if="index" @click="delParts(index)" size="30" type="minus"
							color="#e43d33"></uni-icons>
					</view>
				</uni-forms-item>
			</div>
			<div v-for="(item,index) in formData.workTime">
				<uni-forms-item class="is-direction-top" :label="index == 0?'工作时间':''" :required="index == 0"
					:rules="[{'required': true,errorMessage: '请输入工作时间'}]" :key="item.id"
					:name="['workTime',index,'value']">
					<template v-slot:label v-if="index > 0">
						<div></div>
					</template>
					<view class="dmc">
						<uni-datetime-picker type="datetimerange" v-model="formData.workTime[index].value" hide-second :clear-icon="false"
							placeholder="请输入工作时间"  />
						<uni-icons class="dmc-btn" v-if="!index" @click="addWorkTime" size="30" type="plus"
							color="#666"></uni-icons>
						<uni-icons class="dmc-btn" v-if="index" @click="delWorkTime(index)" size="30" type="minus"
							color="#e43d33"></uni-icons>
					</view>
				</uni-forms-item>
			</div>

js层:

复制代码
	const resetForm = () => {
		return {
			bsNo: stationInfo.bsNo,
			bsName: stationInfo.deptNm,
			fieldNo: '',
			fieldNm: '',
			cropKey: '',
			cropValue: '',
			mediNm: '',
			mediAcreage: '',
			saKey: '',
			saValue: '',
			mediPerMu: '',
			dosageMediKey: '',
			dosageMediValue: '',
			mediTotalMu: '',
			mediContent: '',
			mediModeKey: '',
			mediModeValue: '',
			participants: '',
			parts: [{ value: getUser().userName, id: Date.now() }],
			workTime: [{ value: [moment.now(), moment.now()], id: Date.now() }],
			timeList: [] as any,
			tempCount: NaN,
			mediType: 6
		}
	};
	// 初始表单数据设置
	let formData = ref(resetForm());

3.总结

当某个字段为动态时,要用数组来存放多个值;要注意校验规则的写法。

我使用的是包含id及value的对象结构用来存在动态表单的数据。

相关推荐
pengles7 小时前
基于RuoYi-Vue-Plus项目实现移动端项目
java·vue.js·uni-app
大叔_爱编程1 天前
基于用户评论的热点问题挖掘与反馈分析系统-django+spider+uniapp
python·django·uni-app·毕业设计·源码·课程设计·spider
源码潇潇和逸逸2 天前
独立部署高校圈子平台:PHP+UniApp打造社交+交易+服务一站式校园解决方案
开发语言·uni-app·php
2501_916008892 天前
2026 iOS 证书管理,告别钥匙串依赖,构建可复制的签名环境
android·ios·小程序·https·uni-app·iphone·webview
2501_915918412 天前
iOS App 拿不到数据怎么办?数据解密导出到分析结构方法
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_916008892 天前
iOS App 抓包看不到内容,从有请求没数据一步步排查
android·ios·小程序·https·uni-app·iphone·webview
扶苏10022 天前
记一次 uni-app开发微信小程序 textarea 的“伪遮挡”踩坑实录
微信小程序·小程序·uni-app
RuoyiOffice3 天前
企业请假销假系统设计实战:一张表、一套流程、两段生命周期——BPM节点驱动的表单变形术
java·spring·uni-app·vue·产品运营·ruoyi·anti-design-vue
KongHen023 天前
uniapp-x实现自定义tabbar
前端·javascript·uni-app·unix
RuoyiOffice3 天前
SpringBoot+Vue3+Uniapp实现PC+APP双端考勤打卡设计:GPS围栏/内网双模打卡、节假日方案、定时预生成——附数据结构和核心源码讲解
java·spring·小程序·uni-app·vue·产品运营·ruoyi