Angular调用其它独立验证器

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

Angular调用其它独立验证器

myskies   2022-05-28 我要评论

angular中关于表单动态验证的一种新思路一文中我们给出了Angular项目进行字段校验的三种方法。本文我们将重点围绕第一种方法展开讨论。

假设有如下应用:

该应用的功能是对输入的数值的奇偶数进行判断,如果满足条件,则启用Submit按钮,否则不启用。

跨字段验证

由于对输入数值的校验是根据输入类型来区分的,所以这里我们需要一个跨输入类型及输入数值的验证器:

ngOnInit(): void {
    this.formGroup.setValidators((formGroup) => {
      formGroup = formGroup as FormGroup;
      const type = formGroup.get('type').value as number;
      if (type === 0) {
        // 验证是否是偶数 1️⃣
      } else {
        // 验证是否为奇数 1️⃣
      }
    });
  }

虽然我们可以在1️⃣处直接写入验证器的逻辑,但从分工的角度上来讲,这往往是最坏的一种的方案。

为此,我们同时准备了验证器:

/**
 * 数字校验器
 */
export class NumberValidator {
  /**
   * 偶数校验器
   */
  static isEven(control: AbstractControl): ValidationErrors | null {
    const value = +control.value as number;
    if (Number.isInteger(value) && value % 2 === 0) {
      return null;
    } else {
      return { isEven: '输入的数字不是偶数' };
    }
  }

  /**
   * 奇数校验器
   */
  static isOdd(control: AbstractControl): ValidationErrors | null {
    const value = +control.value as number;
    if (Number.isInteger(value) && value % 2 === 1) {
      return null;
    } else {
      return { isOdd: '输入的数字不是奇数' };
    }
  }
}

使用独立的验证器

有了独立的验证器后,我们可以使用类似如下的代码,直接在跨字段校验器中进行调用:

ngOnInit(): void {
    this.formGroup.setValidators((formGroup) => {
      formGroup = formGroup as FormGroup;
      const type = formGroup.get('type').value as number;
      if (type === 0) {
        return NumberValidator.isEven(formGroup.get('value')); 
      

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们