【问题标题】:angular async validator not triggered on submit if user does not edit form如果用户不编辑表单,则不会在提交时触发角度异步验证器
【发布时间】:2020-11-30 17:59:07
【问题描述】:

我有一个带有登录表单的 angular 10 应用程序,我在其中对用户名和密码进行不同的检查。

这些检查是使用分配给包含用户名和密码表单控件的表单组的异步验证器进行的,并带有 updateOn submit。

此异步验证器运行一个 REST API 调用来进行检查并发送回错误(如果有)。

一切正常,除了我注意到以下行为并且找不到解决方法。

我输入用户名和密码,提交表单,然后从异步验证器中收到“此帐户尚未生效”之类的错误。

如果我不触摸表单并再次单击提交,则没有任何反应,没有 REST API 调用。

如果我编辑登录表单中的任何字段,例如添加和删除字符以返回输入的原始数据,那么当我单击提交时,将运行 REST API 调用。

这里的问题是 REST API 发回的数据可能已更改。例如,我可能已经致电支持团队并说“请立即激活我的帐户”。然后我希望通过再次单击登录来登录。

所以看来我的异步验证器只有在用户更新表单时才会触发,即使我需要 updateOn submit。

这是正常的还是我做错了什么?有没有办法在提交时触发异步验证器,即使表单尚未更新?

【问题讨论】:

    标签: angular validation asynchronous


    【解决方案1】:

    这就是我最终解决这个问题的方法。

    onSubmit(): void {
        if (this.loginFormGroup.untouched) {
          // force validators to run as backoffice validation data may have changed
          this.loginFormGroup.updateValueAndValidity();
        }
        this.loginFormGroup.markAsUntouched();
    }
    

    【讨论】:

      猜你喜欢
      • 2015-05-20
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      相关资源
      最近更新 更多