当前位置: 首页 > news >正文

uniapp中UView中 u-form表单在v-for循环下如何进行表单校验

1、数据data格式
注:rule绑定的tableFromRule中要和表单tableFrom下面放置一个同名数组,确保u-form能找到

tableFrom: {tableData: [//数据详情列表]},tableFromRule: {//校验tableData: [//数据详情列表]},formRules:{localation:[{required: true,message: '请填写xxxx',trigger: ['blur', 'change']}]},

2、dom结构

<u-form labelPosition="left" labelAlign="right" :model="tableFrom" :rules="tableFromRule"labelWidth="auto" ref="uFormData"><view v-for="(item, index) in tableFrom.tableData" :key="index">xxxxxxx</view>
</u-form>

3、u-form-item格式必须用 :prop=“tableData.${index}.localation

<u-form-item label="库位" :prop="'tableData.'+index+'.localation'" borderBottom>xxxxx
</u-form-item>

4、修改源码

在这里插入图片描述

在这里插入图片描述
找到async validateField(value, callback, event = null)函数进行替换
5、替换如下

			// 对部分表单字段进行校验async validateField(value, callback, event = null) {// $nextTick是必须的,否则model的变更,可能会延后于此方法的执行this.$nextTick(() => {// 校验错误信息,返回给回调方法,用于存放所有form-item的错误信息const errorsRes = [];// 如果为字符串,转为数组value = [].concat(value);// 历遍children所有子form-itemthis.children.map((child) => {// 用于存放form-item的错误信息const childErrors = [];if (value.includes(child.prop)) {// 获取对应的属性,通过类似'a.b.c'的形式const propertyVal = uni.$u.getProperty(this.model,child.prop);// 属性链数组const propertyChain = child.prop.split(".");const propertyName =propertyChain[propertyChain.length - 1];//修改:将const改为let let rule = this.formRules[child.prop];//修改:链式是无法通过上面的方式获取的,改为下面的方式if(!rule){rule=uni.$u.getProperty(this.formRules,child.prop);}// 如果不存在对应的规则,直接返回,否则校验器会报错if (!rule) return;// rule规则可为数组形式,也可为对象形式,此处拼接成为数组const rules = [].concat(rule);// 对rules数组进行校验for (let i = 0; i < rules.length; i++) {const ruleItem = rules[i];// 将u-form-item的触发器转为数组形式const trigger = [].concat(ruleItem?.trigger);// 如果是有传入触发事件,但是此form-item却没有配置此触发器的话,不执行校验操作if (event && !trigger.includes(event)) continue;// 实例化校验对象,传入构造规则const validator = new Schema({[propertyName]: ruleItem,});validator.validate({[propertyName]: propertyVal,},(errors, fields) => {if (uni.$u.test.array(errors)) {errorsRes.push(...errors);childErrors.push(...errors);}child.message =childErrors[0]?.message ?? null;});}}});// 执行回调函数typeof callback === "function" && callback(errorsRes);});},// 校验全部数据

6、在tableData每次塞数据的时候,执行如下代码

this.tableFromRule.tableData.unshift(this.formRules)
http://www.lryc.cn/news/160217.html

相关文章:

  • 工作新时代,腾讯轻联塑造高效办公未来
  • JavaScript实现广告倒计时和跳过广告
  • 蚂蚁发布金融大模型:两大应用产品支小宝2.0、支小助将在完成备案后
  • Jenkins 持续集成:Linux 系统 两台机器互相免密登录
  • Golang-GJSON 快速而简单的方法来从 json 文档获取值
  • echarts根据x轴数据长度判断是否倾斜展示/柱状图上方显示数字
  • Eviews用向量自回归模型VAR实证分析公路交通通车里程与经济发展GDP协整关系时间序列数据和脉冲响应可视化...
  • 群晖NAS:通过Docker 部署宝塔面板【注册表:cyberbolt/baota】
  • pdfjs在线预览组件的使用
  • python线程、协程
  • AttributeError: module ‘OpenSSL.SSL’ has no attribute ‘SSLv3_METHOD
  • DTCC 2023丨云原生环境下,需要什么样的 ETL 方案?
  • 在UE4虚幻引擎中加入导航网格体边界体积后丧尸不能移动和发现玩家
  • 华为数通方向HCIP-DataCom H12-821题库(单选题:221-240)
  • aarch64 arm64 部署 stable diffusion webui 笔记 【1】准备 venv 安装pytorch 验证cuda
  • 从方法到目标了解什么是机器学习?
  • Devos勒索病毒:网络安全的新威胁,勒索病毒解密,数据恢复
  • go语言的高级特性
  • 华为VRP系统基本操作
  • Milvus Cloud扩展变更:为向量数据库注入前沿增强功能
  • 外观模式简介
  • web pdf 拖拽签章
  • SQLAlchemy 库创建数据库引擎和会话工厂附带SQLSERVER驱动版本确认方式
  • 用Python登录账户
  • 梳理下我自已对Reactor与及IO多路复用的select\poll\epoll的理解
  • 4. 广播变量
  • GPT 内部 — I : 了解文本生成
  • 平板触控笔哪款好用?好用的第三方apple pencil
  • Mac 上更新系统PATH环境变量
  • Visual Studio Code 终端配置使用 MySQL