Angular - 组合验证不起作用

Angular - Combining validations are not working

我想将一组验证组合成一个包,然后重新使用它,但它对我不起作用,当我应用验证包时,控件始终无效。

validation-bundles.ts - 这里我定义了我的验证包:

import { ValidationErrors, Validators } from "@angular/forms";

export class ValidationBundles {

    static email(): Array<ValidationErrors | null> {
        return [Validators.required, Validators.email];
    }

    static password(): Array<ValidationErrors | null> {
        return [Validators.required, Validators.minLength(6), Validators.maxLength(50)];
    }

}

login.component.ts - 这里我使用验证包作为示例:

this.loginForm = new FormGroup({
      email: new FormControl('', ValidationBundles.email),
      password: new FormControl('', ValidationBundles.password)
    });

login.component.html - 这里我定义了验证错误信息:

<mat-error *ngIf="loginForm.controls['password'].hasError('required')">
    Password is required.
</mat-error>
<mat-error *ngIf="loginForm.controls['password'].hasError('minlength')">
    Mininum length is 6 characters.
</mat-error>
<mat-error *ngIf="loginForm.controls['password'].hasError('maxlength')">
    Maximum length is 50 characters.
</mat-error>

所以我的问题是:

  1. 如何使它正常工作?

  2. 我可以在使用捆绑包时向控件添加更多验证吗?比如合并验证?

  3. 是否有与此主题相关的最佳实践?

你做的一切都很好,只有两个小的改进:

  1. 它是 ValidationFns 数组而不是 ValidationErrors
export class ValidationBundles {

    static email(): Array<ValidatorFn | null> {
        return [Validators.required, Validators.email];
    }

}
  1. 你应该像下面这样调用 ValidationBundles.email 你会得到你需要的:ValidationFns 数组
this.loginForm = new FormGroup({
   email: new FormControl('', ValidationBundles.email()),
   password: new FormControl('', ValidationBundles.password())
});