2017-08-11 1 views
1

Ich versuche, eine Validierung machen für „passwordConfirm“ Feld lesen, aber ich erhalte eine Stange Fehler: ERROR TypeError: Cannot read property 'get' of undefined hier ist mein Code:FormGroup Feldwert zu erhalten: Typeerror: kann Eigenschaft ‚get‘ undefinierter

loginForm: FormGroup; 


ngOnInit(){ 
    this.loginForm = new FormGroup({ 
     'email': new FormControl(null, [Validators.required, Validators.email]), 
     'password': new FormControl(null, Validators.required), 
     'passwordConfirm': new FormControl(null, [Validators.required, this.checkIfMatchingPasswords.bind(this)]), 
    }); 
} 



checkIfMatchingPasswords() { 
    return this.loginForm.get('password').value === this.loginForm.get('passwordConfirm').value ? null : { notSame: true} // error 
    } 
+0

Versuchen Sie 'if (! This.loginForm) {return null}' in Ihrem benutzerdefinierten Validator. – Alex

+0

Nichts passiert. – sandum

+0

sehr seltsam, aber Sie könnten dies versuchen.loginForm.controls ['Steuerelementname']. Wert –

Antwort

0

Was Sie versuchen, durch die Bindung this an Ihren Validator zu erreichen, ist wahrscheinlich fehlgeschlagen, da mehrere Validator-Funktionen in einer einzigen Funktion zusammengeführt werden, wo der Kontext wahrscheinlich anders ist.

Wenn Sie jedoch den Abdruck eines validator function folgen, können Sie folgendes tun:

checkIfMatchingPasswords(control: AbstractControl): ValidationErrors | null { 
    return control.root.get('password').value === control.value ? null : { notSame: true }; 
} 

Der Trick ist, dass jeder weiß, dass es AbstractControlparent und root ist.

-1

Die Lösung ist zu überprüfen, ob die LoginForm vorhanden ist. Wenn ich eine console.log von this.loginForm mache, wird es dreimal ausgeführt. Das erste Mal ist nicht definiert und verursachte den Fehler. Ich weiß nicht, warum es passiert, vielleicht sind das die Lebenszyklus-Haken von Angular.

checkIfMatchingPasswords() { 
    if (this.loginForm) { 
     return this.loginForm.get('password').value === this.loginForm.get('passwordConfirm').value ? null : {notSame: true}; 
    } 
    } 
+0

Nun, das ist im Grunde, was ich sagte, aber anstelle von 'if (this.loginForm)' Ich sagte 'if (! This.loginForm) {null zurückgeben} .... Rest des Codes hier ... 'Aber irgendeine dieser Möglichkeiten funktioniert tho. – Alex

+0

Sie müssen nur daran denken, dass mit dieser Lösung nur validiert wird, wenn 'passwordConfirm' geändert wird :) – Alex

Verwandte Themen