Angular 2反应形式自定义验证

时间:2017-05-27 08:12:13

标签: angular ionic2

我有4个表单字段,我想检查使用被动表单的'oldpass'和'newpass'字段是否相同。

this.changePasswordForm = fb.group({
     'oldpass': ['', Validators.compose([Validators.required, Validators.minLength(6)])],
     'newpass': ['', Validators.compose([Validators.required, Validators.minLength(6)])],
     'confirmpass': ['', Validators.compose([Validators.required])],
     'otp': ['']
   },{validator: CustomValidator.matchConfirmFields('newpass', 'confirmpass')});   

我可以使用以下代码验证'newpass'和'confirmmpass'字段。

static matchConfirmFields(pass: string, confirmpass: string) {
      return (group: FormGroup): {[key: string]: any} => {
        let spass = group.controls[pass];
        let sconfirmpass = group.controls[confirmpass];

        if (spass.value !== sconfirmpass.value) {
          return {
            mismatchedPasswords: true
          };
        }
      }
    }

如何以类似的方式验证'oldpass'和'newpass'字段。

1 个答案:

答案 0 :(得分:1)

我的回答改变了FormGroup中验证器的方式。 首先,我们将为您的班级添加新的验证程序功能 。 它只将抽象控件与字符串进行比较,没有什么特别之处 有一个等于或不等的选项。

public partial class Partial : I1, I2
{
    public void A() { }
    public void B() { } 
}

现在在FormGroup中,我们将它添加到控件中,我们希望将它添加到使用它的所有控件中,并表示如何处理它。

 public confirmPasswordValidator(control: AbstractControl, compareValue: string, equal: boolean = true): null | {} {
    if ((control.value === compareValue) === equal) {
      return null;
    }
    return {
      confirmPassword: {
        valid: false
      }
    }
  }