Custom Validator с .forEach - это можно сделать по-другому (лучше)? - PullRequest
2 голосов
/ 26 сентября 2019

Я создал свой собственный класс валидатора для практики.Это хороший подход или лучше?

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};
    }
}

Ответы [ 3 ]

1 голос
/ 26 сентября 2019

Я бы использовал includes следующим образом:

export class ProjectNameValidator {
  private static blackList = ['Test'];
  static correctName(control: AbstractControl): { [key: string]: boolean } | null {
    return ProjectNameValidator.blackList.includes(control.value) ?  { 'Forbidden name': true } : null;
  }
}
1 голос
/ 26 сентября 2019

Вы перебираете весь список, чтобы проверить, является ли один из них недействительным (запрещенным), но как только вы обнаружите один недействительный, вы все равно продолжите проверку, и, кроме того, существует ли четное количество запрещенных имен, которым вы соответствуетев конечном итоге вы позволите это.(isValid =! isValid).

Я рекомендую использовать indexOf следующим образом:

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

, чтобы быстро проверить, содержится ли введенное значение в черном списке.

0 голосов
/ 26 сентября 2019

Как теперь выглядит мой пользовательский валидатор:

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

export class ProjectNameValidator {
   private static blackList = ['Test1', 'Test2', 'Test3'];
    static correctName(control: AbstractControl): {[key: string]: boolean} | null {
       const name: string = control.value;
       const isInvalid =  ProjectNameValidator.blackList.indexOf(name) !== -1;
       return isInvalid ? {'Forbidden name': true} : null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...