Vue3中使用async-validator进行表单校验

news2024/10/7 20:31:32

官方文档:mirrors / yiminghe / async-validator · GitCodevalidate form asynchronous 🚀 Github 镜像仓库 🚀 源项目地址 ⬇https://gitcode.net/mirrors/yiminghe/async-validator?utm_source=csdn_github_accelerator 

注意:当前示例有bug:先验证失败,再验证成功后,之前失败的消息没有清除

<template>
  <div>
    <div>
      <input
        type="text"
        v-model="formData.username"
        placeholder="请输入用户名"
      />
      <span style="color: red" v-if="errorMessage.username">{{
        errorMessage.username
      }}</span>
    </div>
    <div>
      <input
        tyep="password"
        v-model="formData.password"
        placeholder="请输入密码"
      />
      <span style="color: red" v-if="errorMessage.password">{{
        errorMessage.password
      }}</span>
    </div>
    <button @click="submit()">保存</button>
    <button @click="reset()">重置</button>
  </div>
</template>

<script setup>
import Schema from "async-validator";
import { reactive, ref } from "vue";
//控制输入框变红
const error_username = ref(false);
const error_password = ref(false);
// 表单对象
const formData = ref({
  username: "",
  password: "",
});
// 校验规则
const rules = ref({
  username: {
    required: true,
    message: "姓名不能为空",
  },
  password: [
    {
      required: true,
      message: "密码不能为空",
    },
  ],
});
// 错误提示
const errorMessage = ref({
  username: "",
  password: "",
});
const validator = ref(new Schema(rules.value));
const submit = () => {
  validator.value
    .validate(formData.value, {
      firstFields: true,
    })
    .then((data) => {
      console.log("data:", data);
      // 校验通过
      console.log(" 校验通过,可以发起请求");
    })
    .catch(({ errors }) => {
      // 校验未通过
      // 显示错误信息
      for (let { field, message } of errors) {
        console.log("errors:", errors);
        errorMessage.value[field] = message;
      }
    });
};
// 初始化表单
const initFormData = () => {
  formData.value.username = "";
  formData.value.password = "";
};
// 重置
const reset = () => {
  initFormData();
  // 清空校验错误提示
  for (let key in errorMessage.value) {
    errorMessage.value[key] = "";
  }
};
</script>

<style scoped></style>

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

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

相关文章

19 | 为什么我只查一行的语句,也执行这么慢?

以下内容出自 《MySQL 实战 45 讲》 19 | 为什么我只查一行的语句&#xff0c;也执行这么慢&#xff1f; 第一类&#xff1a;查询长时间不返回 mysql> select * from t where id1;一般碰到这种情况。大概率是表 t 被锁住了。 分析&#xff1a; 首先执行 show processlis…

2023年全球性别差距调研 | 真正的“性别平等”如何实现?

尽管在推进性别平等方面做出了努力&#xff0c;但女性在许多方面仍然落后于男性--从房屋所有权到劳动力参与和董事会占比。虽然新冠疫情带来了前所未有的促进性别平等的政策&#xff0c;但它对结构性变化的影响却很小。 实际上&#xff0c;世界经济论坛估计还需要132年才能消除…

Luogu P1140.数的划分

P1140 数的划分 原题点这里 思路 这是一道动态规划的题目。 步骤主要分 5 5 5 步&#xff1a; 状态的定义转移式的推到递推顺序的判定边界的确定结果的输出 下面&#xff0c;我们针对这道题&#xff0c;细细地讲解一下每一个步骤 一、状态的定义 这道题的状态最简单&a…

面试题分析:统计网站访问次数

难度&#xff1a;较低 平台的访问量非常高&#xff0c;需要实时统计网站的访问次数&#xff0c;请设计一个计数器解决&#xff1a;初级工程师&#xff0c;可能回答使用synchronized锁或重入锁&#xff0c;进一步探讨&#xff0c;synchronized锁太重&#xff0c;有没其他方式&a…

redisson中Semaphore的信号量介绍及其原理

目录 1 基本介绍 1.1API介绍 1.2 示例 2 源码解析 2.1 Semaphore设置许可数量&#xff08;trySetPermits(int permits)&#xff09; 2.2 尝试获取许可&#xff08;boolean tryAcquire()&#xff09; 3 Lua脚本 3.1 加锁lua脚本 3.2 解锁lua脚本 1 基本介绍 Semaphore通…

科技资讯|苹果Vision Pro新专利曝光,与消除晕动症的技术有关

欧洲专利局发布了一份苹果专利&#xff0c;与消除 Apple Vision Pro 晕动病背后的一些工作有关。苹果通过推出新的 R1 处理器实现了这一目标&#xff0c;苹果专利提供了处理器背后的一些详细技术信息&#xff0c;在第 86 号专利点指出&#xff1a;" 在某些实施方案中&…

驾驭计算机视觉的翅膀:论文找代码的几种必杀技!

摘要 对于CVer来说&#xff0c;「代码和找代码」能力都是一种很重要的能力&#xff0c;毕竟idea再好只有通过代码实现出来才能发文章和刷榜。当我们阅读一篇高质量或者英文论文时&#xff0c;如何去找到该文章实现的代码&#xff0c;进而结合文章内容和代码实现去更好的理解作…

PoseiSwap 更新第二期空投,持有 Zepoch 节点数量将决定空投回报

Nautilus Chain 是行业内首个模块化 Layer3 架构链&#xff0c;开发者能够基于模块化进行定制化开发&#xff0c;并有望进一步推动 Web3 应用向隐私、合规等方向发展。当然&#xff0c;Nautilus Chain 的特殊之处还在于为生态用户带来丰厚的空投预期&#xff0c;据悉上线 Nauti…

基于matlab使用标记增强技术将虚拟内容呈现到现实场景中(附源码)

一、前言 此示例演示如何使用基于标记的增强现实将虚拟内容呈现到场景中。 增强现实 &#xff08;AR&#xff09; 通过自然混合真实和虚拟内容来增强现实世界的场景&#xff0c;从而创建新颖的应用程序。例如&#xff0c;增强现实应用程序可以添加虚拟标尺&#xff0c;使用户…

如何正确使用 ThreadLocal

1 前言 当多线程访问共享且可变的数据时&#xff0c;涉及到线程间同步的问题&#xff0c;并不是所有时候&#xff0c;都要用到共享数据&#xff0c;所以就需要ThreadLocal出场了。 ThreadLocal又称线程本地变量&#xff0c;使用其能够将数据封闭在各自的线程中&#xff0c;每…

数据管理成熟度评估DCMM之生产企业数据战略管理办法

生产企业数据战略管理办法 第一部分&#xff1a;导言 随着信息技术的快速发展和数据规模的急剧增长&#xff0c;生产企业越来越重视数据的价值和管理。有效的数据战略管理办法可以帮助生产企业更好地管理和利用数据资源&#xff0c;提高运营效率、决策质量和创新能力。本文将…

SpringMVC数据传递总结

文章目录 1. 分析总结2. 普通格式数据2.1 普通参数2.2 pojo参数2.3 嵌套pojo参数2.4 数组 -- 普通参数2.5 集合 -- 普通参数2.6 web容器添加过滤器指定字符集 3. JSON格式数据3.1 相关准备3.2 json数组(基本)3.3 json对象(pojo)3.4 json数组(pojo) 1. 分析总结 1.1 普通格式数据…

K8S平台安全框架

平台安全框架 1 平台安全框架1.1 安全框架1.1.1 认证框架1.1.2 框架解读 1.2 认证实践1.2.1 令牌用户1.2.2 证书用户 1.3 授权实践1.3.1 集群用户1.3.2 角色基础1.3.3 授权基础1.3.4 用户组实践1.3.5 SA授权1.3.6 SA秘钥 1.4 准入实践1.4.1 准入基础1.4.2 优先调度1.4.3 资源配…

F2-NeRF阅读日志

看到了一篇很好的paper&#xff0c;记录一下&#xff0c;参考&#xff1a; https://www.bilibili.com/video/BV1Lz4y187jL/?spm_id_from333.337.search-card.all.click&vd_sourcea059a118f33728f79abd79e02f8f72d4 https://zhuanlan.zhihu.com/p/618362291 latex写的&am…

Qt5编译使用QFtp模块(环境:win+Qt5.15.2+msvc2019)

目录 QFtp下载编译配置QFtp模块测试 QFtp下载 下载方式较多&#xff0c;可以从github上进行下载&#xff1a;https://github.com/qt/qtftp.git 。 我已将下载好的ftp源码资源放出来了&#xff0c;可以直接下载0积分&#xff1a;链接跳转。 编译 使用Qt Create打开工程后&…

DuDuTalk:4G录音工牌在汽车试乘试驾场景中有什么独特应用价值?

在市场竞争越来越激烈的今天&#xff0c;不管是新能源市场还是燃油车市场&#xff0c;试乘试驾已经当仁不让地成为了几乎所有汽车品牌关注的焦点。特斯拉、“蔚小理”、奔驰、宝马等头部品牌&#xff0c;对于试乘试驾的重视度一定程度上甚至已经超过了展厅接待。 然而&#xf…

解决notion共享网址无法复制的问题

1、打开url Notion – The all-in-one workspace for your notes, tasks, wikis, and databases. 2、选中要复制的内容。 3、右击鼠标&#xff0c;选择“打印” 4、在打印界面中选中要复制的内容&#xff0c;然后按“复制” 复制完成。

Stable Difussion能做什么?

​扩散模型&#xff08;Diffusion Model&#xff09;​ 稳定扩散模型&#xff08;Stable Diffusion&#xff09;属于深度学习模型中的一个大类&#xff0c;即扩散模型。它们属于生成式模型&#xff0c;这意味着它们是被设计用于根据学习内容来生成相似的新的数据的。对于稳定扩…

Vue2与Vue3相应原理区别

Vue3.0中的响应式原理 vue2.x的响应式 1.实现原理&#xff1a; 对象类型&#xff1a;通过Object.defineProperty()对属性的读取、修改进行拦截&#xff08;数据劫持&#xff09;。数组类型&#xff1a;通过重写更新数组的一系列方法来实现拦截。&#xff08;对数组的变更方法…

测试老鸟整理,性能测试高并发压力测试-案例,进阶之道...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 单个接口的压测&a…