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

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

现代前端应用中,表单交互是用户体验的重要组成部分。而表单验证作为其中的核心环节,不仅需要前端的即时反馈,还需要与后端接口联动进行数据合法性校验。本文将详细介绍如何在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属性同时控制边框颜色和错误提示
前后端验证统一:
将前端规则和后端接口验证集成到同一套流程中

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

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

相关文章:

  • Siri在WWDC中的缺席显得格外刺眼
  • 深入解析 Nacos MCP Router:云原生时代的 MCP 服务调度中枢
  • 高考倒计时(vb.net,持续更新版本)
  • axios取消请求
  • skynet源码学习-skynet_timer定时器
  • Camera相机人脸识别系列专题分析之十二:人脸特征检测FFD算法之libvega_face.so数据结构详解
  • 【部署】使用华为云容器化部署Java项目指南
  • Linux 文件类型,目录与路径,文件与目录管理
  • 金融机构的网络安全
  • Ansible小试牛刀
  • django filter 统计数量 按属性去重
  • ubuntu搭建nfs服务centos挂载访问
  • Web应用安全漏洞扫描:原理、常用方法及潜在风险解析?
  • 破局与重构:人工智能深度赋能基础教育变革研究
  • Maxun:开源无代码网页数据提取平台的新选择
  • 函数中的Callable
  • 逆向工程:破解某金融App加密协议——在安全与法律的钢丝绳上行走
  • 哈希表与unordered_set和unordered_map的实现
  • Java事务回滚详解
  • 分类模型:逻辑回归
  • [灵感源于算法] 算法问题的优雅解法
  • 【解决办法】git clone报错unable to access ‘xxx‘: SSL certificate problem
  • 华为0528笔试
  • 剑指offer20_链表中环的入口节点
  • 408第一季 - 数据结构 - 折半查找与二叉排序树
  • Java面向对象思想以及原理以及内存图解
  • 【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架
  • while/do while/for循环几个小细节
  • Android Native 之 lmkd进程和kernel kswapd的关联
  • 树突状细胞与肿瘤