uniapp 单表、多级动态表单添加validateFunction自定义规则

uniapp 多级动态表单添加自定义规则

在uniapp制作小程序时,当涉及到需要设置validateFunction的校验规则时。可能遇到的问题

1、validateFunction不生效,没有触发
2、多层级表单怎么添加validateFunction自定义校验规则

本文将以单表单校验和多表单校验分类描述

单表单自定义规则校验

要注意的是:

1、去掉:rules=“rules”,因为表单再校验时validateFunction会不执行
2、本文中photoList是自定义组件,主要结构为数组,可按照自己的需求填写
3、须在onReady()内设置规则、

    <template>
           <uni-forms ref="baseForm" :modelValue="baseFormData" label-position="left" label-width="150rpx">
				<uni-forms-item label="现场拍照" required name="imageList">
						<photoList v-model="baseFormData.imageList" limit="9"></photoList>
					</uni-forms-item>
			</uni-forms>
			<u-button class="button" type="primary" shape="circle" @click="submit('baseForm')">提交</u-button>
</template>
<script>
export default {
       data() {
			return {
			dynamicRules: {
					imageList: {
						rules: [{
							required: true,
							errorMessage: '最少一张图片'
						}, {
							validateFunction: (rule, value, data, callback) => {
								// 异步需要返回 Promise 对象
								return new Promise((resolve, reject) => {
									setTimeout(() => {
										//按照自己的需要填写
									}, 500)
								})
							}
						}]
					},
			}
		}onReady() {
			/* 这里,我们通过refs拿到增加的内容,然后setRules */
			this.$refs.baseForm.setRules(this.dynamicRules)
		},
		methods:{
		     // 提交
			 submit(ref) {
				this.$refs[ref].validate().then(res => {
				}).catch(err => {
					this.$modal.alert(err[0].errorMessage)
				})
			},
		}
}
</script>

多层级表单规则校验

要注意的是:

1、多层级表单与单层级外部校验相同,不同的是需要在新增子项或者原表单中有子项遍历时,先渲染,后添加规则。
2、给子项uni-from-item组件添加ref用于判断校验位置。

<template>
           <uni-forms ref="baseForm" :modelValue="baseFormData" label-position="left" label-width="150rpx">
					<view v-for="(item,index) in baseFormData.inspectionCustodyWorkLogDetailBoList" :key='index'>
							<uni-forms-item label="照片" required :ref="'inspectionCustodyWorkLogDetailBoList-'+index"
								:rules="[{required: true,errorMessage: `检查${index+1}图片不能为空`
						}]" :name="['inspectionCustodyWorkLogDetailBoList',index,'imagelist']" label-width="100rpx">
								<view class="form-item">
									<photoList
										v-model="baseFormData.inspectionCustodyWorkLogDetailBoList[index].imagelist"
										limit="9"></photoList>
								</view>
							</uni-forms-item>
						</view>
					</view>
					<view >
					<u-button type="primary" icon="plus-square-fill" @click="add" plain
						:hairline="false">新增检查项</u-button>
				</view>
			</uni-forms>
			<u-button class="button" type="primary" shape="circle" @click="submit('baseForm')">提交</u-button>
</template>
<script>
export default {
       data() {
			return {
			baseFormData: {
					inspectionCustodyWorkLogDetailBoList: [], //检查记录
			},
			dynamicRules: {
			// 基础表单数据
					imageList: {
						rules: [{
							required: true,
							errorMessage: '最少一张图片'
						}, {
							validateFunction: (rule, value, data, callback) => {
								// 异步需要返回 Promise 对象
								return new Promise((resolve, reject) => {
									setTimeout(() => {
										//按照自己的需要填写
									}, 500)
								})
							}
						}]
					},
			}
		}onReady() {
			/* 这里,我们通过refs拿到增加的内容,然后setRules */
			this.$refs.baseForm.setRules(this.dynamicRules)
		},
		methods:{
		// 选择企业这是在父表单需获取子项时增加
			company(val) {
				if (val != undefined) {
					// 获取企业必检项这是举例
					this.mustDeal = [{checkContent:1,inspectionItemType:1,riskLocation:2},{checkContent:1,inspectionItemType:1,riskLocation:2}
					]
					//循环获取内容添加至表单中
					this.mustDeal.forEach((item, index) => {
			        	this.baseFormData.inspectionCustodyWorkLogDetailBoList.push({
							checkContent: item.checkContent,
							images: null,
							inspectionItemType: item.inspectionItemType,
							riskLocation: item.riskLocation,
							id: Date.now(),
							imagelist: [],
							isPass: null, //是否合格
							isMustCheck: 1,
						})
					})
					/* 这里,我们通过refs拿到增加的内容,然后setRules */
					this.$nextTick(() => {
						/* 用nextTick是让界面先渲染 */
						/* 根据html中的ref规则,获取到uni-forms-item */
						this.baseFormData.inspectionCustodyWorkLogDetailBoList.forEach((ite, inde) => {
							// 	// rules[`imagelist`]=this.dynamicRules.imagelist.rules
							let $Item = this.$refs['inspectionCustodyWorkLogDetailBoList-' + inde];
							/* 对这个uni-forms-item主动setRules */
							/* 这里直接设置的是对应字段的rules */
							$Item[0].setRules(this.dynamicRules.imagelist.rules);
						})
					})
				} 
			},
		// 新增检查项
			add() {
				this.baseFormData.inspectionCustodyWorkLogDetailBoList.push({
					checkContent: null,
					images: null,
					id: Date.now(),
					imagelist: [],
					isPass: null, //是否合格
					isMustCheck: 0, //非必检
				})
				/* 这里,我们通过refs拿到增加的内容,然后setRules */
				this.$nextTick(() => {
					/* 用nextTick是让界面先渲染 */
					/* 根据html中的ref规则,获取到uni-forms-item */
					let $Item = this.$refs['inspectionCustodyWorkLogDetailBoList-' + (this.baseFormData
						.inspectionCustodyWorkLogDetailBoList.length - 1)];
					/* 对这个uni-forms-item主动setRules */
					/* 这里直接设置的是对应字段的rules */
					$Item[0].setRules(this.dynamicRules.imagelist.rules);
				});
			},
		     // 提交
			 submit(ref) {
				this.$refs[ref].validate().then(res => {
				}).catch(err => {
				//输出报错信息
					this.$modal.alert(err[0].errorMessage)
				})
			},
		}
}
</script>
以上是本人工作中为解决问题使用,不足之处还望指出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/900378.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

14款被严重低估的安全红队测试工具推荐,网络攻防|网络安全必看的工具合集推荐!

大家好&#xff0c;我是小强 工具往往可以决定网络安全渗透测试或红队演练活动的成败。虽然Kali中的许多工具都已经过验证且稳定可靠&#xff0c;但并不能适合所有渗透测试场景。对于安全红队而言&#xff0c;需要在不同测试需求下&#xff0c;确保有足够的装备来实现测试目标…

洞见数据未来,StarRocks Summit Asia 2024 即将启幕!

在 AI 时代&#xff0c;我们需要怎样的数据基础软件&#xff1f; 数据量和数据类型的需求飞速上涨&#xff0c;我们不仅需要将历史上各种基础设施中的数据进行分析使用&#xff0c;还要关注性能、灵活性、性价比&#xff0c;以及确保单一可信数据源。这一切构成了当前大数据领…

三维管线管网建模工具MagicPipe3D V3.5.3

经纬管网建模系统MagicPipe3D&#xff0c;本地离线参数化构建地下管网三维模型&#xff08;包括管道、接头、附属设施等&#xff09;&#xff0c;输出标准3DTiles、Obj模型等格式&#xff0c;支持Cesium、Unreal、Unity、Osg等引擎加载进行三维可视化、语义查询、专题分析&…

喜报!腾讯云存储获第三届“鼎新杯”优秀案例!

引言 2024年9月24日-25日&#xff0c;由中国通信标准化协会主办、中国信息通信研究院&#xff08;简称“中国信通院”&#xff09;承办、中国通信企业协会支持的“2024数字化转型发展大会”在北京召开。大会公布了第三届“鼎新杯”数字化转型应用大赛案例评选结果。 腾讯云存…

预算不够,怎么跟KOL砍价?(内附砍价模板)

​在当今的数字营销时代&#xff0c;海外红人&#xff08;KOL&#xff09;的影响力不容小觑。他们的一篇帖子、一个视频&#xff0c;甚至是一张照片&#xff0c;都有可能为企业带来巨大的流量和销量。 当企业满怀希望地找到一位粉丝众多、影响力强的KOL&#xff0c;准备洽谈合作…

2024年双十一有什么必买好物推荐?双11最值得关注的宝藏好物分享

​随着2024年双十一购物狂欢节的到来&#xff0c;各种实用且富有创意的小物件成为了大家关注的焦点。在这场全民参与的购物盛宴中&#xff0c;一款既能满足日常需求又能提升生活便捷性的宝藏好物——充电宝&#xff0c;成为了许多人心目中的首选。无论是忙碌的上班族&#xff0…

【前端Vue学习笔记】组件注册方式 组件传递数据 组件事件 透传 插槽slot 组件生命周期 动态组件 异步组件 依赖注入 Vue应用

文章目录 组件注册方式全局注册全局注册的缺点推荐使用局部注册步骤 组件传递数据-Props步骤注意事项 组件传递多种数据类型组件传递Props效验默认值必选项注意警告 组件事件父组件代码子组件代码 组件之间传递数据的方案父传子子传父 组件事件配合v-model使用步骤&#xff1a;…

linux网络编程5——Posix API和网络协议栈,使用TCP实现P2P通信

文章目录 Posix API和网络协议栈&#xff0c;使用TCP实现P2P通信1. socket()2. bind()3. listen()4. connect()5. accept()6. read()/write(), recv()/send()7. 内核tcp数据传输7.1 TCP流量控制7.2 TCP拥塞控制——慢启动/拥塞避免/快速恢复/快速重传 8. shutdown()9. close()9…

【线下培训】龙信科技应邀参与了由教育部网络安全与执法虚拟教研室(中国刑事警察学院)举办的学术讲座

文章关键词&#xff1a;电子数据取证培训、产学研推进、手机取证、介质取证 2024年10月23日&#xff0c;龙信科技应邀参与了由教育部网络安全与执法虚拟教研室&#xff08;中国刑事警察学院&#xff09;举办的学术讲座。在这次学术交流中&#xff0c;我们公司的技术专家陈杰以…

Redis Search系列 - 第一讲 创建索引

目录 一、引言二、全文检索基本概念三、创建索引 一、引言 Redis Search 是 Redis 的一个模块&#xff0c;用于提供全文搜索和二级索引功能。它允许在 Redis 数据库中执行复杂的搜索查询&#xff0c;并支持多种数据类型和查询操作。以下是 Redis Search 的一些关键特性&#x…

学习threejs,使用canvas样式化粒子

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.PointCloud简介1.11 …

Vue3+ts+vite自动导入vue的依赖

Vue3tsvite自动导入vue的依赖 unplugin-auto-import 主要依赖 npm i -D unplugin-auto-import// vite.config.ts import AutoImport from unplugin-auto-import/viteexport default defineConfig({plugins: [AutoImport({ imports: ["vue", "vue-router"…

团体标准审查结果一般会有哪几种情况?

1. 通过&#xff1a; • 标准质量高&#xff1a;标准的内容符合国家法律法规和相关标准的要求&#xff0c;技术指标科学、合理、先进&#xff0c;具有较强的适用性和可操作性 • 材料完整规范&#xff1a;送审材料齐全&#xff0c;标准的格式、文本编写等符合规定&#xff0c;为…

深入拆解TomcatJetty——Tomcat生命周期与多层容器

深入拆解Tomcat&Jetty&#xff08;三&#xff09; 专栏地址&#xff1a;https://time.geekbang.org/column/intro/100027701 1 Tomcat组件生命周期 Tomcat如何如何实现一键式启停 Tomcat 架构图和请求处理流程如图所示&#xff1a; 对组件之间的关系进行分析&#xff0c;…

deploylinux的ubuntu系统无法成功安装使用MySQL❓

&#x1f3c6;本文收录于《全栈Bug调优(实战版)》专栏&#xff0c;主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&am…

如何编辑加密的PDF文件?

PDF文件打开之后&#xff0c;发现编辑功能都是灰色的&#xff0c;无法使用&#xff0c;无法编辑PDF文件&#xff0c;遇到这种情况&#xff0c;是因为PDF文件设置了限制编辑导致的。一般情况下&#xff0c;我们只需要输入PDF密码&#xff0c;将限制编辑取消就可以正常编辑文件了…

由于导出的数据名字中带有/,导致Matlab打不开,怎么办?

&#x1f3c6;本文收录于《全栈Bug调优(实战版)》专栏&#xff0c;主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&am…

Spring Boot集成PageHelper分页插件详解---补充

这里写目录标题 内容补充 内容 ⭐最新版!SpringBoot正确集成PageHelper姿势&#xff0c;不再被误导&#xff01; Spring Boot集成PageHelper分页插件详解 原本看了这两篇文章&#xff0c;觉得写的其实挺好的。但是发现两篇文章里面&#xff0c;对于方法的使用&#xff0c;都…

昆虫种类识别数据集昆虫物种分类数据集YOLO格式VOC格式 目标检测 机器视觉数据集

一、数据集概述 数据集名称&#xff1a;10类昆虫图像数据集 数据集包含了多种农作物中常见的昆虫种类&#xff0c;包括军虫、豆蓟象、红蜘蛛、水稻瘿蚊、水稻卷叶蛾、水稻叶蝉、水稻水蚤、小麦薄翅薄翅蔗蝇、白背飞虱和黄稻螟。 1.1可能应用的领域 农业害虫监测与防控&#x…

C++,STL 044(24.10.24)

内容 1.set容器的构造函数。 2.set容器的赋值操作。 运行代码 #include <iostream> #include <set>using namespace std;void printSet(set<int> &s) {for (set<int>::iterator it s.begin(); it ! s.end(); it){cout << *it << &…