javascript - lösenordsbekräftelse i angular 2


Jag försöker kontrollera om de två lösenorden är lika. Jag får inget felmeddelande när de inte är det, men jag får inte felmeddelandet "Lösenordet måste matcha".

Nedan är mitt DOM:

<div class="form-group" [ngClass]="{'has-error': formName.get('password').touched && 
                formName.get('password').hasError('invalidPassword')}">
    <label class="control-label">Password</label>
    <input type="text" class="form-control" formControlName="password" name="password" required />
</div>

<div class="form-group" [ngClass]="{'has-error': formName.get('confirmpassword').touched 
        && formName.get('confirmpassword').hasError('mismatchedPasswords')}">
    <label class="control-label">confirm password</label>
    <input type="text" class="form-control" formControlName="confirmpassword" name="confirmpassword" required />
    <span class="help-block" *ngIf="formName.get('confirmpassword').touched 
            && formName.get('confirmpassword').hasError('mismatchedPasswords')">
            Password must match
        </span>
</div>

Min komponentklass om hur jag bygger mitt formulär:

   this.formName = this.fb.group({
        name: ["", [Validators.required]],            
        password: ["",[Validators.required, ValidationHelper.passwordValidator]],
        confirmpassword: ["",Validators.required],
        info: this.fb.group({
            acc: ["",[Validators.required, ValidationHelper.creditCardValidator]]
        })
   },{ validator: ValidationHelper.matchPass})

Och min funktion för att matcha lösenord:

static matchPass = (control: AbstractControl) : {[key: string]: boolean} => {    
    let password = control.get('password');
    let confirmPassword = control.get('confirmpassword');
    return password.value === confirmPassword.value ? null : { 'mismatchedPasswords': true };        
}  

Funktionen anropas, jag får också returvärdet... men varför visar inte mitt bekräfta lösenord-inputfält något fel eller aktiverar dess span-tag.

Svar #1

Problemet ligger i dessa rader i din mall:

formName.get('confirmpassword').hasError('mismatchedPasswords')

Du tillämpar validatorn på gruppen formName, men kontrollerar felet på confirmpassword formControl.

Försök använda detta på de två ställen där du kontrollerar mismatchedPasswords i din mall.

formName.hasError('mismatchedPasswords')

Relaterade artiklar