首页 > 解决方案 > 带有 .forEach 的自定义验证器 - 可以做得不同(更好)吗?

问题描述

我创建了自己的验证器类进行练习。这是一个好方法还是可以做得更好?

import { AbstractControl } from '@angular/forms';

export class ProjectNameValidator {
   private static blackList = ['Test1'];
    static correctName(control: AbstractControl): {[key: string]: boolean} | null {
       const name: string = control.value;
       let isValid = true;
       ProjectNameValidator.blackList.forEach(forbiddenName => {
           if (forbiddenName === name) {
              isValid = !isValid;
           }
       });
       return isValid ? null : {'Forbidden name': true};
    }
}

标签: angulartypescript

解决方案


您遍历整个列表以检查其中一个是否无效(禁止),但是一旦您发现一个无效,您仍然会继续检查,最重要的是,如果您匹配的禁止名称数量相等,您将结束允许它。(isValid = !isValid)。

我建议使用 indexOf 如下:

ProjectNameValidator.blackList.indexOf(name) >= 0;

快速检查输入的值是否包含在黑名单中。


推荐阅读