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

news2024/10/25 22:27:14

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>
以上是本人工作中为解决问题使用,不足之处还望指出。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

未来汽车驾驶还会有趣吗?车辆动力学系统简史

未来汽车驾驶还会有趣吗&#xff1f;车辆动力学系统简史 本篇文章来源&#xff1a;Schmidt, F., Knig, L. (2020). Will driving still be fun in the future? Vehicle dynamics systems through the ages. In: Pfeffer, P. (eds) 10th International Munich Chassis Symposiu…

数字图像处理的概念(一)

一 何谓数字图像处理 1 图像的概念 图像是对客观存在的物体的一种相似性的、生动的写真或描述。 2 图像的类别 可见光成像和不可见光成像 单波段、多波段和超波段图像 伽马射线成像 主要用途包括核 医学和天文观测 等 。 核医学 a)同位素注射 骨骼扫描图像 b)正电子放射( …

【Docker】安装、镜像、容器

什么是Docker&#xff1f; Docker&#xff1a;是基于Go语言实现的开源项目。 Docker 是一个用于开发、交付和运行应用程序的开放平台。它允许开发人员将应用程序及其依赖包打包到一个可移植的容器中&#xff0c; 然后在任何流行的 Linux 机器上运行。Docker 容器是完全隔离的&…

Openpyxl--学习记录

1.工作表的基本操作 1.1 工作表的新建打开与保存 1.1.1 创建工作簿 from openpyxl import Workbook from pathlib import Pathfile_path Path.home() / "Desktop" / "123.xlsx"# 1.创建工作簿 wb Workbook() # 2.访问默认工作簿 ws wb.active # 3.填充…

pytorh学习笔记——cifar10(六)MobileNet V1网络结构

基础知识储备&#xff1a; 一、深度可分离卷积&#xff08;Depthwise Separable Convolution&#xff09; MobileNet的核心是深度可分离卷积&#xff08;Depthwise Separable Convolution&#xff09;&#xff0c;深度可分离卷积是卷积神经网络&#xff08;CNN&#xf…

低代码开发详解与行业应用指南

低代码开发简化软件开发&#xff0c;助力企业数字化转型。ZohoCreator应用于零售、制造、教育、IT、医疗、房地产等行业&#xff0c;提升效率、降低成本。灵活定价&#xff0c;支持免费试用&#xff0c;助力企业快速实现数字化。 一、低代码开发是什么&#xff1f; 低代码开发…

CSS3 动画相关属性实例大全(三)(columns、filter、flex、flex-basis 、flex-grow、flex-shrink属性)

CSS3 动画相关属性实例大全&#xff08;三) &#xff08;columns、filter、flex、flex-basis 、flex-grow、flex-shrink属性&#xff09; 本文目录&#xff1a; 一、columns属性&#xff08;设置元素的列宽和列数&#xff09; 二、filter属性&#xff08;调整图像、背景和边…

打造充电场站:场地选择与合规运营详解

建设一座充电站需要六步流程&#xff1a;准备工作 → 备案 → 土地审核 → 规划审核 → 电力申请 → 验收确认 一、准备工作 在确定建设前&#xff0c;要考察待选的场地&#xff0c;例如空地、停车场等&#xff0c;与场地所有方签订充电站建设合作协议。根据场地和车流量等实际…

Docker 部署 EMQX 一分钟极速部署

部署 EMQX ( Docker ) [Step 1] : 拉取 EMQX 镜像 docker pull emqx/emqx:latest[Step 2] : 创建目录 ➡️ 创建容器 ➡️ 拷贝文件 ➡️ 授权文件 ➡️ 删除容器 # 创建目录 mkdir -p /data/emqx/{etc,data,log}# 创建容器 docker run -d --name emqx -p 1883:1883 -p 1808…

H7-TOOL的LUA小程序教程第15期:电压,电流,NTC热敏电阻以及4-20mA输入(2024-10-21,已经发布)

LUA脚本的好处是用户可以根据自己注册的一批API&#xff08;当前TOOL已经提供了几百个函数供大家使用&#xff09;&#xff0c;实现各种小程序&#xff0c;不再限制Flash里面已经下载的程序&#xff0c;就跟手机安装APP差不多&#xff0c;所以在H7-TOOL里面被广泛使用&#xff…

在矩池云使用智谱情感语音模型GLM-4-Voice,详细指南

GLM-4-Voice 是智谱 AI 推出的端到端语音模型。GLM-4-Voice 能够直接理解和生成中英文语音&#xff0c;进行实时语音对话&#xff0c;并且能够遵循用户的指令要求改变语音的情感、语调、语速、方言等属性。 本文将详细介绍&#xff0c;如何在GPU算力租赁平台矩池云上快速复现、…

MongoDB安装配置及配置和启动服务

MongoDB 安装配置 附&#xff1a;MongoDB官网下载地址&#xff1a; https://www.mongodb.com/download-center/community 注&#xff1a; 官网可以下载最新版的MongoDB安装包&#xff0c;有MSI安装版和ZIP安装版。我们课堂上使用4.4.4的ZIP安装版。安装版参考博客&#xff1…

使用rust实现类似C#中的Convert数据转换类

// 编写一个模块&#xff08;好比是C#的一个类&#xff09; pub mod Convert {// 定义函数&#xff08;好比C#中的方法&#xff09;pub fn ToInt32(s:&str) -> i32 {s.parse::<i32>().unwrap()}pub fn ToInt64(s:&str) -> Result<i64,std::num::ParseIn…

Maven入门到实践:从安装到项目构建与IDEA集成

目录 1. Maven的概念 1.1 什么是Maven 1.2 什么是依赖管理 1.3 什么是项目构建 1.4 Maven的应用场景 1.5 为什么使用Maven 1.6 Maven模型 2.初识Maven 2.1 Maven安装 2.1.1 安装准备 2.1.2 Maven安装目录分析 2.1.3 Maven的环境变量 2.2 Maven的第一个项目 2.2.1…

AUTOSAR CP 中 BswM 模块功能与使用介绍(2/2)

三、 AUTOSAR BswM 模块详解及 ARXML 示例 BswM 模块的主要功能 BswM&#xff08;Basic Software Mode Manager&#xff09;模块在 AUTOSAR 架构中扮演着模式管理的核心角色。它负责管理车辆的各种模式&#xff08;如启动、运行、停车等&#xff09;&#xff0c;并根据不同的…

stm32入门教程--ADC模拟-数字转换器

ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转你换位内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁。 12位逐次逼近型ADC&#xff0c;1us转换时间 输入电压范围&#xff1a;0-3.3V转换结果范围…

MCK主机加固与防漏扫的深度解析

在当今这个信息化飞速发展的时代&#xff0c;网络安全成为了企业不可忽视的重要议题。漏洞扫描&#xff0c;简称漏扫&#xff0c;是一种旨在发现计算机系统、网络或应用程序中潜在安全漏洞的技术手段。通过自动化工具&#xff0c;漏扫能够识别出系统中存在的已知漏洞&#xff0…

基于大型语言模型的智能网页抓取

Google Gemini 是 Google AI 创建的大型语言模型 (LLM) 系列&#xff0c;可提供最先进的 AI 功能。Gemini 模型包括&#xff1a; Gemini Ultra — 最大、最强大的模型&#xff0c;擅长处理编码、逻辑推理和创意协作等复杂任务。可通过 Gemini Advanced&#xff08;原名 Bard&a…

使用QT绘图控件QCustomPlot绘制波形图

使用QT绘图控件QCustomPlot绘制波形图 下载QCustomPlot 下载QCustomPlot,链接路径 解压之后就能看到源代码了 在Qt中添加QCustomPlot的帮助文档 在Qt Creator的菜单:工具–>选项–>帮助–>文档–>添加qcustomplot\documentation\qcustomplot.qch文件。

《PP-OCRv1》论文精读:PaddleOCR是目前SOTA级别的OCR开源技术(截止2024年10月)

PP-OCR: A Practical Ultra Lightweight OCR System论文地址PP-OCRv2: Bag of Tricks for Ultra Lightweight OCR System论文地址PP-OCRv3: More Attempts for the Improvement of Ultra Lightweight OCR System论文地址PaddleOCR Github OCR工具库 43.5K个star PP-OCRv1由百度…