Я запускаю приложение, используя Angular CLI 9.0.7. В этой заявке есть форма с полем, для которой необходимо проверить свой элемент управления git. Для этого я создал пользовательский валидатор.
Когда поле формы изменяется, пользовательский валидатор активируется для проверки согласованности.
Компонент пользовательского валидатора должен вызывать метод который находится в другом классе и является общим для других компонентов, и когда он собирается выполнить эту строку, я получаю сообщение Не удается прочитать свойство ' isCpf ' undefined.
Я скопировал то, что вызывается внутри пользовательского валидатора и передается, но это не правильно, это отстой.
Как я могу правильно вызвать метод isCpf и использовать передовой опыт?
Это мой пользовательский валидатор
static cpfValido(control: AbstractControl): any | null {
const cpf: string = control.value;
if (cpf === '') {
return null;
}
else {
if (this.isCpf(cpf)) { // When isCpf is called throw Cannot read property 'isCpf' of undefined
null;
}
else {
return { 'cpfValido': false };
}
}
}
и в том же файле это вызываемый метод
private static isCpf(pNumeroCpf: string): boolean {
if (!pNumeroCpf) return false;
let nro: string = this.preencherComCaracterEsquerda(this.removerFormatacao(pNumeroCpf), this.SIZE_CPF, '0');
let j: number = 0;
let peso: number = 2;
let soma: number = 0;
let dvc: number[] = [0, 0];
let dvi: number[] = [0, 0];
if (this.temCaracterRepetido(nro)) return false;
for (j = 0; j < 2; j++) {
peso = 2;
soma = this.aplicarPeso(nro.substring(0, nro.length - 2 + j), peso, 11);
dvc[j] = (soma % 11) < 2 ? 0 : 11 - (soma % 11);
}
dvi[0] = parseInt(nro.charAt(nro.length - 2), 10);
dvi[1] = parseInt(nro.charAt(nro.length - 1), 10);
return (dvi[0] === dvc[0] && dvi[1] === dvc[1]);
}