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

antd-vue表单实现一个临时校验效果

需求场景:

有这样一个需求,ant-design-vue组件表单校验这里,我们使用input组件,使用maxlength限制用户输入,但没有使用showCount,也就是当时输入超限的时候,用户并不知道超出了限制,当然这也是因为我们的表单没有lable行并没有配合显示数字控制,所以就需要在达到字数控制的时候,我们依然能够提示这个字数限制的提示警告报错。

接下来看我如何实现

一、拦截rules自身携带的max校验,改为自定义校验

因为这里我们使低代码实现,rules都是在formitem上配置的,表单配置项配置componentProps,我们实现将这些配置想传递到真实的表单上。

author: {label: "论文作者",componentsProps: {maxlength: 64},placeholder: "输入施引论文作者, 多作者用,分隔",colSpan: 24,rules: [{ required: true, message: "请输入施引论文作者" },{ max: 64, message: "最多只能输入64个字符" }],type: "Input"},

这是一个作者的配置项:

以上是一个展示效果。

看到配置项中, componentsProps的配置项maxlength只允许64个字符,同时rules中我们配置了max为64的校验规则,如果这里我们不做处理,那当用户输入文字达到64个字符的时候,就无法再次输入,自然也就触发不了这个校验。

于是我们拦截这个校验,改为自定义校验。

<FormItem:rules="[...customRules(i.options[okey].rules)]"...其他属性
>
...其他代码
</ForItem>

我们将传递的参数的rules使用customRules再次处理一下,这里面我们拦截这个max校验,改为自定义校验。

if (item.max) {return {validator: async (rule, value) =>checkMax(rule, value, item.max, item.message, item.field)};} 

二、如何实现临时提示

拦截这个校验,我们处理的基本逻辑是,当用户输入长度达到限制条件的值时,我们需要提示。

那么这里面就需要两个操作,第一个是抛出错误,第二个就是要关闭错误。

我们知道在ant-design-vue中校验结果需要返回一个promise,但是我们要干两件事情,怎么处理呢。

我们利用promise.all实现。

if (value && value.length === max) {const validateError = new Promise((resove, reject) => {reject(message);});const validateSuccess = new Promise((resove, reject) => {setTimeout(() => {formRef.value && formRef.value.clearValidate([_rule.field.split(".")]);resove("success");}, 1000);});// return Promise.reject(message);return Promise.all([validateError, validateSuccess]);}return Promise.resolve();

以上就是我们巧妙的实现了,临时校验后,校验小时的方法。

注意这里个取消校验,是利用clearValidate这方法,通过数组指定当前绑定的表单项。

而这个表单项我们通过,rule是可以取到的,只需要变成数组即可。

这样,我这里就实现了这个需求效果。

http://www.xdnf.cn/news/217837.html

相关文章:

  • DeepSeek+Dify之六通过API调用工作流
  • 头歌java课程实验(Java中的IO流操作)
  • python脚本下载ERA5数据详细规范和教程
  • Mysql中索引的知识
  • c#栈及其应用
  • 生物信息学常用软件InSequence,3大核心功能,简易好上手
  • PyTorch 深度学习实战(23):多任务强化学习(Multi-Task RL)之扩展
  • Redis Sentinel 和 Redis Cluster 各自的原理、优缺点及适用场景是什么?
  • pStubMsg--MemorySize0x74字节是如何分配的之rpcrt4!NdrAllocate函数分析
  • 项目三 - 任务1:采用面向对象方式求三角形面积
  • 大模型落地难题:如何用LoRA低成本微调企业私有模型?
  • 信道估计--最小均方误差(MMSE)
  • 解锁植被参数反演密码:AI 与 Python 的融合之道
  • 深入理解过拟合:机器学习中的常见陷阱
  • 软考高项(信息系统项目管理师)第 4 版全章节核心考点解析(力扬老师课程精华版)
  • qtfaststart使用教程(moov置前)
  • CC52.【C++ Cont】滑动窗口
  • Arthas在Java程序监控和分析中的应用
  • ChatDLM Technical Report 介绍与分析
  • oracle怎样通过固化较优执行计划来优化慢sql
  • 信息学奥赛一本通 1454:山峰和山谷
  • < 自用文 rclone > 在 Ubuntu 24 访问 Google Drive 网络内容
  • 双剑合璧:融合视觉基础与语言模型,勇闯未知领域的语义分割新框架
  • Linux开发中的线程管理(C++11 std::thread)
  • Pytorch 反向传播
  • 塔能照明节能服务流程:精准驱动工厂能耗优化
  • leetcode:3005. 最大频率元素计数(python3解法)
  • 第三次作业(密码学)
  • 【android bluetooth 协议分析 06】【l2cap详解 11】【l2cap连接超时处理逻辑介绍】
  • (29)VTK C++开发示例 ---绘制两条彩色线