2017-09-13 102 views
0

我试图做一个自定义验证。如果密码不匹配,我想添加ng-invalid类(将输入设置为无效)。确认密码验证器不工作 - 角

这里是HTML的

<div class="form-group"> 
    <label for="password">Password:</label> 
    <label class="validations" @load *ngIf="!regForm.get('password').valid && regForm.get('password').touched">Please Enter a Valid Password!</label> 
    <input type="password" class="form-control" id="password" minlength="6" required placeholder="Enter Your Team Password" formControlName="password"> 
</div> 
<div class="form-group"> 
     <label for="password">Confirm Password:</label> 
     <label class="validations" @load *ngIf="(!(regForm.get('password').value == regForm.get('password_confirmation').value)) && regForm.get('password_confirmation').touched">Passwords do not Match!</label> 
     <input type="password" class="form-control" id="password" 
      [ngClass]="{pwd_mismatch : !(regForm.get('password').value === regForm.get('password_confirmation').value) && regForm.get('password_confirmation').touched}" required placeholder="Re-Enter Your Team Password" formControlName="password_confirmation"> 
</div> 

和component.ts -

passwordConfirm(control: FormControl): {[s: string]: boolean} { 
    if (control.value != this.password) { 
     control.hasError; 
     return null; 
    } 
    return {'mismatch': true}; 
} 

注:this.password店从密码输入FormControlpwd_mismatch类是实时添加到输入,但未设置为无效

回答

2

您的逻辑是倒退的。如果密码匹配,则必须返回null,即如果没有错误。因此,代码应该是

passwordConfirm(control: FormControl): {[s: string]: boolean} { 
    if (control.value === this.password) { 
     return null; 
    } 
    return { mismatch: true }; 
} 
+0

好吧,现在它的罚款,但NG-无效即使输入相同的密码 –

+0

不删除然后this.password可能不包含你认为它是一个包含。发布一个完整的重现问题的最小例子。 –

+0

明白了,现在我添加了 - 如果(control.value === this.regForm.get('password').value)但它不能访问得到undefined –