【tips】动态el-form-item中校验的注意点

场景:

  1. 在el-table中动态渲染了input输入框。输入框是必填项,
  2. 必填校验不通过需要展示红色边框(不需要提示文字)
html 复制代码
<el-table-column v-for="(header, index) in tableHeader" :key="index" :label="header.name"  align="center" :prop="header.code">
<template #default="scope">
 	<el-form-item :prop="`tableRowList.${scope.$index}.${header.code}`" :rules="[{ required: true, message: '', trigger: ['change', 'blur'], validator: validateValue } ]" :show-error="false" class="mb0" label-width="0">
	 <el-input v-model="scope.row[header.code]" placeholder="请输入" size="small"></el-input>
  </el-form-item>
	</template>
</el-table-column>

一般我们校验的做法是,在form的model值中对于属性,在rules进行设置xx

xml 复制代码
 <el-form :model="queryParams_generate" :rules="rules" ref="queryForm" :inline="true" label-width="90px">
<el-form-item :prop="xx" >

而对于动态表格,rules的prop是不一定的,我们valid可以单独设置。

这里的注意点在于:**validateValue 的第二个参数value,如果且xx在model的话,获取value是可以的,但我们目前的:prop="tableRowList.${scope.$index}.${header.code}",不存在model值中,

  1. value值为空,所以要另外获取要检查的输入值val**
javascript 复制代码
// 验证函数:检查数值是否超出限制
const validateValue = (rule, value, callback) => {
    const idx = rule.field?.split('.')?.[1];
    const code = rule.field?.split('.')?.[2];
    const val = tableRowList.value?.[idx]?.[code];

    if (!val) return callback(); // 非必填
    console.log('validateValue', val)
    // if (isNaN(Number(val))) {
    //     return callback(new Error(`非数字`));
    // }
    const numValue = getNum(val);
    const checkResult = checkNumVaildText(numValue);
    if (checkResult) {
        callback(new Error(`数据${checkResult}`));
    } else {
        callback();
    }
};
  1. from.validate调用的返回值valid为true,所以在valid之后要注意再处理动态prop的校验
javascript 复制代码
formRef.value.validate((valid) => {
    if (valid) {
        // 这里另外处理动态prop的校验
        }
 })
相关推荐
css趣多多18 小时前
地图快速上手
前端
zhengfei61118 小时前
面向攻击性安全专业人员的一体化浏览器扩展程序[特殊字符]
前端·chrome·safari
码丁_11718 小时前
为什么前端需要做优化?
前端
Mr Xu_19 小时前
告别硬编码:前端项目中配置驱动的实战优化指南
前端·javascript·数据结构
Byron070719 小时前
从 0 到 1 搭建 Vue 前端工程化体系:提效、提质、降本实战落地
前端·javascript·vue.js
哆啦code梦19 小时前
前端存储三剑客:localStorage、sessionStorage与Cookie解析
前端·前端存储
zhengfei61119 小时前
【AI平台】- 基于大模型的知识库与知识图谱智能体开发平台
vue.js·语言模型·langchain·知识图谱·多分类
徐小夕@趣谈前端19 小时前
Web文档的“Office时刻“:jitword共建版2.0发布!让浏览器变成本地生产力
前端·数据结构·vue.js·算法·开源·编辑器·es6
Data_Journal20 小时前
如何使用 Python 解析 JSON 数据
大数据·开发语言·前端·数据库·人工智能·php
德育处主任Pro20 小时前
纯前端网格路径规划:PathFinding.js的使用方法
开发语言·前端·javascript