angular - Anpassad validator med .forEach - Kan det göras på ett annat (bättre) sätt?
Jag skapade min egen validator-klass för övning. Är detta en bra metod eller kan det göras bättre?
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};
}
}
Svar #1
Jag skulle använda includes på följande sätt:
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;
}
}
Svar #2
Du loopar igenom hela listan för att kontrollera om någon av dem är ogiltig (förbjuden), men så fort du hittar en ogiltig fortsätter du ändå att kontrollera och dessutom, om det finns ett jämnt antal förbjudna namn som du matchar kommer du sluta med att tillåta det. (isValid=!isValid).
Jag rekommenderar att använda indexOf på följande sätt:
ProjectNameValidator.blackList.indexOf(name) >= 0;
för att snabbt kontrollera om det angivna värdet finns i svartlistan.
