我正在使用Angular CLI 9.0.7运行应用程序。在此应用程序中,存在一个带有字段的表格,需要对其控制数字进行验证。为此,我创建了一个自定义验证器。
更改表单上的字段时,将激活“自定义验证器”以检查一致性。
Custom Validator组件需要调用另一个类中的方法,该方法由其他组件共享,并且在执行此行时,我收到消息无法读取属性' isCpf '未定义。
我复制了自定义验证器中的内容,并通过了,但这不正确,很糟糕。
如何正确调用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]);
}