Ich habe dieses FormGroupWie setValidators nach seiner Initialisierung FormGroup
defaultIdNumberValidator = [Validators.required, Validators.minLength(6),
Validators.maxLength(11)];
this.registerForm = this.formBuilder.group({
permissions: this.formBuilder.group({
country: ['', [Validators.required]],
identityNumber: [null, this.defaultIdNumberValidator],
}, {validator: [this.validateId]})
});
und ich möchte löschen und fügen Sie Validatoren zu identityNumber
abhängig von bestimmten Bedingungen in this.validateId
Verfahren.
validateId(input: AbstractControl) {
if(condition) {
input.get("identityNumber").clearValidators(); //this is working
}
if(condition) {
input.get("identityNumber").setValidators(this.defaultIdNumberValidator); //not working
}
}
Wenn setValidators
Methode, die ich diesen Fehler genannt wird (Zeile: 109 ist die Linie, wo setValidators
genannt wird)
ERROR TypeError: Cannot read property 'defaultIdNumberValidator' of undefined
at RegisterComponent.validateId (register.component.ts:109)
at eval (forms.js:742)
at Array.map (<anonymous>)
at _executeValidators (forms.js:742)
at eval (forms.js:694)
at eval (forms.js:742)
at Array.map (<anonymous>)
at _executeValidators (forms.js:742)
at eval (forms.js:694)
at eval (forms.js:742)
UPDATE:
I Entwicklungs-Server neu starten, und ich jetzt Erhalten Sie diesen Fehler
ERROR TypeError: Cannot read property 'setValidators' of undefined
at RegisterComponent.validateId (register.component.ts:109)
at eval (forms.js:742)
at Array.map (<anonymous>)
at _executeValidators (forms.js:742)
at eval (forms.js:694)
at eval (forms.js:742)
at Array.map (<anonymous>)
at _executeValidators (forms.js:742)
at eval (forms.js:694)
UPDATE 2:
Ich schaffe plunker einfache Fehler zu reproduzieren. Wenn Sie zuerst auf Eingabe klicken und dann irgendwo anders klicken, erhalten Sie einen Fehler darunter. Dieser Fehler sollte daher entfernt werden, wenn die Länge des Eingabewerts> = 2 ist und sollte wieder sichtbar sein, wenn> = 5. Ich weiß auch nicht, warum der Fehler verschwindet, wenn die Länge des Eingabewerts 3 ist und nicht 2 ...
Können Sie eine plunkr erstellen? Befindet sich Ihre validateId-Methode in einer separaten ts-Datei? –
Sie verlieren offensichtlich den Verweis auf "dieses" irgendwo –
Siehe Update. Ich werde versuchen, eine plunkr –