网站搜索

javascript - 我如何从 Angular 中的表单对象获取验证错误?


我做了一个包含我问题的 Stackblitz,我使用模板来显示错误,当我使用 form.errors 时,它返回 null,即使 form.get('oldPassword').errors 并没有返回 null

编辑
作为额外信息,当我为每个字段定义 getter 时,我会收到错误

get oldPassword() {
   return this.form.get('oldPassword')
}

编辑

这是我的代码正在运行

答案#1

在这里查看此功能请求:https://github.com/angular/angular/issues/10530

FormGroup 的 errors 对象只有在 FormGroup 验证器返回错误时才不会为 null,而不会因为控件验证器而出现错误。

考虑一种情况,两者的值都可以,但它们的组合不可以。这时,FormGroup 验证器可能会返回类似 PasswordAndVerificationAreNotEqual 的内容。

查看从 Angular 2 FormGroup 获取所有验证错误以获取所有表单组错误的解决方案。

答案#2

Angular 并没有将控制器错误暴露给 FormGroup https://github.com/angular/angular/issues/10530 但它确实处理 FormGroup 的 invalid 状态。

为了递归获取所有错误,我建议你使用类似如下的函数:

export function collectErrors(control: any): any | null {
  if (control.controls) {
    return Object.entries(control.controls).reduce(
      (acc, [key, childControl]) => {
        const childErrors = collectErrors(childControl);
        if (childErrors) {
          acc = { [key]: childErrors, ...acc };
        }
        return acc;
      },
      null
    );
  } else {
    return control.errors;
  }
}

然后你可以按如下方式使用它:

onClick() {
  console.log(collectErrors(this.form));
  console.log(this.form.get("oldPassword").errors);
}

Stackblitz 示例