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

用户体验升级:表单失焦调用接口验证,错误信息即时可视化

现代前端应用中,表单交互是用户体验的重要组成部分。而表单验证作为其中的核心环节,不仅需要前端的即时反馈,还需要与后端接口联动进行数据合法性校验。本文将详细介绍如何在Vue3中实现表单输入与接口验证的无缝联动,并优雅地展示错误提示信息。
一个完整的验证流程应该是:用户输入 → 即时反馈 → 失焦触发接口验证 → 提交前汇总所有错误 → 统一提示。
基础实现:表单与接口的联动验证
下面是一个基于Vue3+Element Plus的完整实现示例,展示了如何在失焦时调用接口验证并显示错误信息:

<script setup lang="ts">
import { ref, reactive } from 'vue'const errorInfo = ref(''); // 保存错误信息const validateSubjectId = (rule: any, value: any, callback: any) => {if(!value) {callback(new Error('请输入科目编号'));} else if (errorInfo.value) {callback(new Error(errorInfo.value));} else {callback();}
};const formRef = ref()const form = ref({name: '',subjectId: '',})const rules = reactive({name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],subjectId: [{ required: true, message: '请输入科目编号', trigger: 'blur'},// 点击保存时,调用该验证。接口调用为异步,该方法不执行{ validator: validateSubjectId, trigger: 'blur'} ]})// 判断是否合法const getISValid = () => {// 实际开发,根据后端返回值进行判断,这里通过是否可以整除2进行代替setTimeout(() => {const randomInt = Math.floor(Math.random() * 11);errorInfo.value =  randomInt % 2 ? '' : '输入不合法'})// 接口调用if (!success) {// 如果返回错误,保存错误信息 配合表单 error属性显示错误信息errorInfo.value = msg;} else {errorInfo.value = '';}}const save = () => {formRef.value?.validate()}</script>
<template><el-form label-width="120px" ref="formRef" :model="form" :rules="rules"><el-form-item label="姓名:" prop="name"><el-input v-model="form.name" placeholder="请输入姓名"/></el-form-item><el-form-item label="科目编号:" prop="subjectId" :error="errorInfo"><el-input v-model="form.subjectId" placeholder="请输入科目编号" @blur="getISValid"/></el-form-item><el-form-item><el-button>取消</el-button><el-button type="primary" @click="save">保存</el-button></el-form-item></el-form>
</template>

效果展示如下:
在这里插入图片描述
错误信息位置:
使用el-form-item的:error属性同时控制边框颜色和错误提示
前后端验证统一:
将前端规则和后端接口验证集成到同一套流程中

如果有更好的解决方案,欢迎在评论区留言分享。

相关文章:

  • 111页可编辑精品PPT | 华为业务变革框架及战略级项目管理华为数字化转型方法论
  • 不同类型的道路运输安全员证书(如公路、水路、联运)考试内容有何区别?
  • 力扣LFU460
  • VAE(变分自编码器) CVAE(条件变分自编码器)
  • 第二篇:Agent2Agent (A2A) 协议——A2A 架构、组件和通信动态
  • C++基础学习:深入理解类中的构造函数、析构函数、this指针与new关键字
  • java复习 07
  • Rust 学习笔记:通过 Send 和 Sync trait 实现可扩展并发性
  • C++11列表初始化:从入门到精通
  • 电脑扩展屏幕工具
  • dbeaver 查询clickhouse,数据库时间差了8小时
  • echarts 数据大屏(无UI设计 极简洁版)
  • 条件概率:AI大模型概率统计的基石
  • (二)TensorRT-LLM | 模型导出(v0.20.0rc3)
  • 二叉树进阶:经典算法题详解
  • 6月10日day50打卡
  • 可视化图解算法50:最小的K个数
  • SpringBoot集成Tess4j :低成本解锁OCR 图片识别能力
  • 鹰盾视频的AI行为检测是怎样的风控?
  • [极客时间]LangChain 实战课 ----- 01|LangChain系统安装和快速入门(2)
  • 建设一个网站需要什么软件/近一周热点新闻
  • 考虑了软件开发过程中的风险/鹤壁seo推广
  • b2b网站推广方法/竞价专员是做什么的
  • 个人建设网站/网络平台推广有哪些渠道
  • 电子商城网站建设/seo首页关键词优化
  • wordpress文章如何搬家/重庆seo网站运营