千家信息网

vue中如何利用element实现一个区间选择组件

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,今天小编给大家分享一下vue中如何利用element实现一个区间选择组件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有
千家信息网最后更新 2024年11月23日vue中如何利用element实现一个区间选择组件

今天小编给大家分享一下vue中如何利用element实现一个区间选择组件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

主要思路

  1. 单个表单校验:必填项校验、正整数校验、区间校验

  2. 关联校验:右侧阈值不得小于左侧阈值

根据上面的思路,单个表单的校验属于公共校验方法,关联校验需要分别校验(因为对比对象不同,且提示语不同),由此在自定义校验中有了如下定义:

rules: {  min: [    { required: true, message: '必填项,请维护', trigger: 'blur' },    { validator: this.validateCom, trigger: 'blur' },    { validator: this.validateMin, trigger: 'blur' },  ],  max: [    { required: true, message: '必填项,请维护', trigger: 'blur' },    { validator: this.validateCom, trigger: 'blur' },    { validator: this.validateMax, trigger: 'blur' },  ],},

公共校验方法:正整数校验、区间校验

validateCom(rule, value, callback) {  const one = Number(value);  if (Number.isInteger(one)) {    if (one < MIN_NUMBER) {      return callback(new Error(`输入值必须大于${MIN_NUMBER}`));    } else if (one > MAX_NUMBER) {      return callback(new Error(`输入值必须小于${MAX_NUMBER}`));    }    return callback();  }  return callback(new Error('输入值必须为正整数'));},

注意:input输出的始终是字符串类型,需要转换成数字后进行比对

关联校验:

validateMin(rule, value, callback) {  const one = Number(value);  const max = Number(this.form.max);  if (!max || one < max) {    return callback();  }  return callback(new Error('输入值不得大于最大阈值'));},validateMax(rule, value, callback) {  const one = Number(value);  const min = Number(this.form.min);  if (!min || one > min) {    return callback();  }  return callback(new Error('输入值不得小于最小阈值'));},

大概,你会想,这不就完了吗!so easy!现在真正的坑才开始

填坑(重点)

根据上面的写法,组件的基本功能实现了,但是有一个坑!如下:

很显然,左侧值是小于右侧值的,但是校验提示仍然报错。究其原因,还是关联校验的问题。既然是关联交验,改变其中一个时应该会重新校验两个。很简单,在input改变时,重新校验表单不就OK了吗

handleChange() {  this.$refs.form.validate();}

真实表现正如我们所料,但是当我们打开console的时候,会看到Uncaught (in promise) false,这又是什么鬼,身为优秀的前端工程师,你定不会允许自己的代码里报错,即使不影响正常流程。

经查证:Promise报错,Uncaught的意思是代表有reject状态没有被catch。究其原因,改变一个值时,校验整个表单时,改变的那个input会执行两次校验,导致异常。

最后做如下修改:

handleMinChange() {  this.$refs.form.validateField('max');},handleMaxChange() {  this.$refs.form.validateField('min');},// 并对外暴露操作方法getFormData() {  const ret = {};  this.$refs.form.validate((valid) => {    ret.valid = valid;    ret.form = this.form;  });  return ret;},resetForm() {  this.$refs.form.resetFields();},

总结input表单输出值为String类型,即使设置了type=number关联交验时需要验证其关联项,且不能重复校验

全部代码:

 

以上就是"vue中如何利用element实现一个区间选择组件"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

关联 输入 表单 区间 整数 知识 篇文章 阈值 组件 不同 方法 面的 选择 最小 代码 内容 单个 原因 右侧 思路 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 学生网络安全会议记录 反网络安全法27条 新建数据库 文档 无权限 网络技术专家刘大伟 软件开发培训学校梦见 杭州极云网络技术有限公司好吗 软件开发怎样设置里程碑 投科技互联网多少起投 网页游戏有服务器吗 关于网络安全我们要注意什么 php支持什么数据库 加强信息网络安全工作方案 怎么搭建私人物理服务器 服务器远程桌面过期怎么处理 网络安全新股高管华为 黑龙江卫星授时数显钟服务器 深圳市众创网络技术 微信的服务器是自己研发的吗 关于网络安全的征文600 数据库 学生信息管理系统 网络安全管理员三级考题 金蝶k3软件数据库类型 苏州hpe服务器哪家好 查看已创建好的数据库信息用什么 嘉兴聚优网络技术公司 blast中数据库怎么选择 亳州交通软件开发外包公司 服务器系统安全管理 网络安全性要求包括哪些方面 浙江高性能服务器虚拟主机
0