vuelidate 异步验证器 - 如何去抖?

2024-02-14

因此,我的电子邮件/用户表单元素上的异步验证器存在问题。每次输入字母时,它都会检查有效性。如果电子邮件有 30 个字符,那么就超过 30 个电话!有人知道消除 vuelidate 自定义验证器的最佳方法吗?当我尝试使用 debounce 时,我从 vuelidate 收到各种错误,因为它期待响应。

<div class="form-group">
        <label for="emailAddress">Email address</label>
        <input type="email" class="form-control col-md-6 col-sm-12" v-bind:class="{ 'is-invalid': $v.user.email.$error }" id="emailAddress" v-model.trim="$v.user.email.$model" @change="delayTouch($v.user.email)" aria-describedby="emailHelp" placeholder="[email protected] /cdn-cgi/l/email-protection">
        <small v-if="!$v.user.email.$error" id="emailHelp" class="form-text text-muted">We'll never share your email with anyone.</small>
        <div class="error invalid-feedback" v-if="!$v.user.email.required">Email address is required.</div>
        <div class="error invalid-feedback" v-if="!$v.user.email.email">This is not a valid email address.</div>
        <div class="error invalid-feedback" v-if="!$v.user.email.uniqueEmail">This email already has an account.</div>
    </div>

    <script>
        import { required, sameAs, minLength, maxLength, email } from 'vuelidate/lib/validators'
        import webapi from '../services/WebApiService'
        import api from '../services/ApiService'
    
        const touchMap = new WeakMap();
    
        const uniqueEmail = async (value) => {
            console.log(value);
            if (value === '') return true;
    
            return await api.get('/user/checkEmail/'+value)
                        .then((response) => {
                            console.log(response.data);
                            if (response.data.success !== undefined) {
                                console.log("Email already has an account");
                                return false;
                            }
                            return true;
                        });
        } 
    
        export default {
            name: "Register",
            data() {
              return {
                errorMsg: '',
                showError: false,
                user: {
                  firstName: '',
                  lastName: '',
                  email: '',
                  password: '',
                  password2: ''
                }
              }
            },
            validations: {
                user: {
                    firstName: {
                        required,
                        maxLength: maxLength(64)
                    },
                    lastName: {
                        required,
                        maxLength: maxLength(64)
                    },
                    email: {
                        required,
                        email,
                        uniqueEmail //Custom async validator
                    },
                    password: {
                        required,
                        minLength: minLength(6)
                    },
                    password2: {
                        sameAsPassword: sameAs('password')
                    }
                }
            },
            methods: {           
                onSubmit(user) {
                    console.log(user);
                    /*deleted*/
    
                },
                delayTouch($v) {
                    console.log($v);
                    $v.$reset()
                    if (touchMap.has($v)) {
                        clearTimeout(touchMap.get($v))
                    }
                    touchMap.set($v, setTimeout($v.$touch, 1250))
                }
            }
        }
    </script>

当我尝试用 debounce 包装我的异步函数时,vuelidate 不喜欢它,所以我删除了它。不确定如何限制自定义“uniqueEmail”验证器。


正如“泰迪·马尔科夫”所说,你可以打电话$v.yourValidation.$touch()在您的输入模糊事件上。我认为使用 Vuelidate 是更有效的方式。


<input type="email" class="form-control col-md-6 col-sm-12"
           :class="{ 'is-invalid': !$v.user.email.$anyError }"
           id="emailAddress" v-model.trim="$v.user.email.$model"
           @change="delayTouch($v.user.email)"
           @blur="$v.user.email.$touch()"
           aria-describedby="emailHelp"
           placeholder="[email protected] /cdn-cgi/l/email-protection"
>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vuelidate 异步验证器 - 如何去抖? 的相关文章

随机推荐

  • 如何预选struts html:radio按钮

    如何预选struts 1 html radio按钮 谢谢 玛丽亚 你应该有自己的价值Form保存单选按钮数据的对象 您需要将其预先填写在您的Form在转发到 JSP 之前 或者默认在Form的构造函数 如果它始终默认为该值 动作 java
  • Google 地图 javascript API 中的“我的位置”

    有没有办法使用存在于上的 我的位置 按钮谷歌地图 http maps google com 在你自己的 webbapplication 中使用 javascript api 吗 我在这里阅读了有关添加控件的内容Google 地图 Javas
  • 使用引用 MySQL 中相同表的子查询的 SQL UPDATE

    我正在尝试使用 UPDATE 更新表中一堆行中的列值 问题是我需要使用子查询来导出该列的值 并且它依赖于同一个表 这是查询 UPDATE user account student SET student student education
  • 似乎无法解析 KeyedByTypeCollection?

    我正在使用 NET 可移植来创建一个库 并且在尝试创建 KeyedByTypeCollection 的实例时遇到了一些问题 我检查了我的参考资料 NET Portable Subset System Collections Generic
  • React Native - SQLite 找不到预填充的数据库文件

    我正在尝试使用https github com andpor react native sqlite storage https github com andpor react native sqlite storage对于 SQLite
  • 我们如何在没有第三个变量和算术运算符的情况下交换两个数字?

    我们如何在没有第三个变量和算术运算符的情况下交换两个数字 XOR算不算算术运算符 如果没有 那么 X X XOR Y Y X XOR Y X X XOR Y 将此伪代码转换为可编译的 Java 代码作为练习留给读者 关于 java 标签
  • docker-compose如何引用其他目录中的文件

    有这个 dockerfile FROM python 3 8 3 alpine ENV MICRO SERVICE home app microservice RUN addgroup S APP USER adduser S APP US
  • CordovaWebView 与 android 中的 onBackPressed 方法混淆

    正如标题所说CordovaWebView and onBackPressed在 android 中组合起来会产生奇怪的结果 我有混合应用程序 我的主要活动有DrawerLayout and CordovaWebView 我的 onBackP
  • android ndk数据保存/加载

    我正在致力于将 PC OpenGL 应用程序移植到 Android 上 我选择使用 NDK android native app glue 框架 据我了解 它允许我继续使用 C 甚至不编写任何 JAVA 代码行 听起来很有希望 对我来说第一
  • 将加密的 csv 导入 Python 3

    因此 我计划使用 Jupyter Notebook Python 3 进行一些数据分析 出于协作原因 我想将数据存储在 github 存储库上 但数据集很敏感 因此 我想将数据 当前为 csv 作为加密文件存储在存储库上 然后在运行时解密
  • .NET ORM、不可变值对象、结构、默认构造函数和只读属性

    我刚刚开始使用 NET ORM 甚至还没有在 Entity Framework 和 NHibernate 之间做出决定 但在这两种情况下 我都遇到了一个问题 因为他们似乎希望我以各种方式损害域模型的完整性 特别是在 C 对象设计的更精细的方
  • (numpy) __array_wrap__ 有什么作用?

    我第一次深入 SciPy LinAlg 模块 我看到了这个函数 def makearray a new asarray a wrap getattr a array prepare new array wrap return new wra
  • 'quietly = TRUE' 何时在 require() 函数中真正起作用?

    我正在尝试编写一组函数来检查丢失的 R 软件包 并在必要时安装它们 StackOverflow 上有一些很好的代码可以做到这一点 从这里开始 https stackoverflow com questions 4090169 elegant
  • 在更改视图的可见性时应用动画

    我的应用程序中有一个 Horizo ntalScrollView 并且我经常使用它的可见性 可见和消失 所以我想要的是 我可以应用某种动画或其他东西 使其开始以滑动的方式变得可见和不可见 而不是突然使其可见和不可见吗 任何帮助或建议将不胜感
  • 本地主机上的 Django/Celery 多个队列 - 路由不起作用

    我跟着芹菜docs http celery readthedocs org en latest userguide routing html manual routing在我的开发机器上定义 2 个队列 我的芹菜设置 CELERY ALWA
  • 从 Eclipse 中删除插件的正确方法

    上次 我遇到了从 Eclipse 中删除插件的问题 症状 1 如果删除通过已安装菜单 无法正确重新安装并且有多个视角 例如对于 SQL 资源管理器 在Open Perspective menu 2 如果通过文件系统删除 手动从plugins
  • 人员 API 谷歌配额限制

    我正在研究 People API 这仅适用于 google 用户 有人知道吗 我一天 分钟可以免费询问多少次 一般配额限制是多少 超过门槛需要花费多少钱 Thanks 有两种不同的 People API 您可以在云控制台中查看两者的配额 G
  • 具有基本身份验证的 Webclient / HttpWebRequest 返回 404 未找到有效 URL

    编辑 我想回来指出问题根本不在我这边 而是与另一家公司的代码有关 我正在尝试使用基本身份验证来打开页面 我不断收到 404 页面未找到错误 我可以将我的网址复制并粘贴到浏览器中 它工作正常 如果我尚未登录他们的网站 它会弹出一个凭据框 否则
  • ASP.NET Core 默认调试启动 URL

    使用 ASP NET Core Web API 模板时 默认调试启动 URL 以某种方式设置为api values 此默认配置在哪里以及如何更改它 我能找到的有关此启动 URL 声明位置的文档非常少 这个里面有简短的提及博客文章 https
  • vuelidate 异步验证器 - 如何去抖?

    因此 我的电子邮件 用户表单元素上的异步验证器存在问题 每次输入字母时 它都会检查有效性 如果电子邮件有 30 个字符 那么就超过 30 个电话 有人知道消除 vuelidate 自定义验证器的最佳方法吗 当我尝试使用 debounce 时